J'ai deux classes de modèles PHP nommées Catégorie et Élément. Une Catégorie peut avoir plusieurs Éléments et un Élément peut appartenir à plusieurs Catégories. J'ai créé une relation ManyToMany avec 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 contrôleur:
$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 un élément et l'ajouter à la catégorie.
La liste des articles appartenant à la catégorie est affichée sous le formulaire.
Lorsque je soumets 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 s'il actualise la page, il disparaît.
Quelqu'un peut-il m'aider avec cela? Merci d'avance.
Votre entité Catégorie est le côté inverse de la relation.
Essayez de changer addItems pour ressembler à ceci:
public function addItem(\Ako\StoreBundle\Entity\Item $item)
{
$item->addCategory($this);
$this->items[] = $item;
}
Notez que j'ai changé votre pluriel en singulier, car vous avez affaire à des entités uniques, pas à des collections.
J'ai eu les mêmes problèmes ... je pense que tu as oublié
$category->addItems($item);
$em->persist($category);
$em->flush();