Symfony2-Doctrine: ManyToMany relation n'est pas enregistrée dans la base de données
J'ai deux PHP classes du modèle, nommée Catégorie et de l'Élément. Une Catégorie peut avoir beaucoup d'Articles et un Article peut appartenir à plusieurs Catégories.
J'ai créé une relation ManyToMany pour les deux classes:
class Category
{
/**
* @ORM\ManyToMany(targetEntity="Item", mappedBy="categories", cascade={"persist"})
*/
private $items;
/**
* Add items
*
* @param Ako\StoreBundle\Entity\Item $items
*/
public function addItems(\Ako\StoreBundle\Entity\Item $items)
{
$this->items[] = $items;
}
/**
* Get items
*
* @return Doctrine\Common\Collections\Collection
*/
public function getItems()
{
return $this->items;
}
}
Et:
class Item
{
/**
* @ORM\ManyToMany(targetEntity="Category", inversedBy="items", cascade={"persist"})
* @ORM\JoinTable(name="item_category",
* joinColumns={@ORM\JoinColumn(name="item_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id")}
* )
*/
private $categories;
/**
* Add categories
*
* @param Ako\StoreBundle\Entity\Category $categories
*/
public function addCategories(\Ako\StoreBundle\Entity\Category $categories)
{
$this->categories[] = $categories;
}
/**
* Get categories
*
* @return Doctrine\Common\Collections\Collection
*/
public function getCategories()
{
return $this->categories;
}
}
Maintenant dans mon controller:
$em = $this->getDoctrine()->getEntityManager();
$item = $em->getRepository('AkoStoreBundle:Item')->find($item_id);
$category = $em->getRepository('AkoStoreBundle:Category')->find($category_id);
$category->addItems($item);
$em->flush();
//Render the same page again.
Dans cette page, je montre la liste de tous les éléments dans un champ de sélection. L'utilisateur peut sélectionner qu'un seul élément, et l'ajouter à la catégorie.
La liste des éléments qui appartiennent à la catégorie sont affichés en dessous du formulaire.
Lorsque l'-je soumettre le formulaire, l'élément sélectionné est ajouté à la liste des éléments de Catégorie, et est illustré ci-dessous, mais il n'est pas stocké dans la base de données, et si l'actualisation de la page, il disparaît.
Quelqu'un peut m'aider avec ça?
Merci à l'avance.
- Post ci-dessus m'aide beaucoup à la carte de Nombreux de Nombreux de la cartographie au sein de l'Entité. Est-il bon (plein) de la documentation lien qui montrent tous les type de base de données de cartographie (mappages d'entité) ?
Vous devez vous connecter pour publier un commentaire.
Votre Catégorie de l'entité est le inverse côté de la relation.
Essayez de changer addItems à ressembler à ceci:
Noter que j'ai changé votre pluriel des noms au singulier, puisque vous avez à traiter avec des entités uniques, pas collections.
'by_reference' => false
sur les champs correspondants. Sinon, l'ajouter* et supprimer* méthodes ne sont jamais appelés.CollectionType
J'ai eu le même problème...je crois que vous avez oublié
persist()
nécessaire parce que les deux entités sont déjà gérés