with onetomany manytomany many foreign fields many-to-many doctrine2 symfony

many-to-many - onetomany - manytomany doctrine symfony



Symfony2-Doctrine: la relaciĆ³n ManyToMany no se guarda en la base de datos (2)

Tengo dos clases de modelo de PHP denominadas Categoría y Artículo. Una Categoría puede tener muchos Elementos y un Artículo puede pertenecer a muchas Categorías. He creado una relación ManyToMany con ambas clases:

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; } }

Y:

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; } }

Ahora en mi controlador:

$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.

En esta página, muestro la lista de todos los artículos en un campo de selección. El usuario puede seleccionar un elemento y agregarlo a la categoría.

La lista de elementos que pertenecen a la categoría se muestra debajo del formulario.

Cuando presento el formulario, el elemento seleccionado se agrega a la lista de elementos de categoría, y se muestra a continuación, pero no se almacena en la base de datos, y si actualiza la página, desaparece.

¿Puede alguien ayudarme con esto? Gracias por adelantado.


Su entidad de Categoría es el lado inverso de la relación.

Intenta cambiar addItems para que se vea así:

public function addItem(/Ako/StoreBundle/Entity/Item $item) { $item->addCategory($this); $this->items[] = $item; }

Tenga en cuenta que cambié sus nombres en plural a singular, ya que se trata de entidades individuales, no de colecciones.


Tuve los mismos problemas ... creo que olvidaste

$category->addItems($item); $em->persist($category); $em->flush();