Symfony2-Doctrina: Muchas relaciones no se guardan en la base de datos
Tengo dos clases de modelos PHP llamadas Category y Item. Una Categoría puede tener muchos Artículos y un Artículo puede pertenecer a muchas Categorías. He creado una muchísima relación 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 elementos 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 el I envíe 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 de antemano.
2 answers
Su entidad de categoría es el lado inverso de la relación.
Intenta cambiar los addItems para que se vean así:
public function addItem(\Ako\StoreBundle\Entity\Item $item)
{
$item->addCategory($this);
$this->items[] = $item;
}
Tenga en cuenta que he cambiado sus nombres plurales a singular, ya que se trata de entidades individuales, no colecciones.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-12 20:03:33
Tuve los mismos problemas...Creo que olvidaste
$category->addItems($item);
$em->persist($category);
$em->flush();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-16 21:50:00