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.

Author: Berry Ligtermoet, 2011-08-12

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.

 86
Author: timdev,
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();
 2
Author: Babu,
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