Symfony2-Doctrine: wiele relacji nie jest zapisywanych do bazy danych
Mam dwie klasy modelu PHP o nazwie Category i Item. Kategoria może mieć wiele przedmiotów, a przedmiot może należeć do wielu kategorii. Stworzyłem wiele relacji do obu klas:
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;
}
}
I:
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;
}
}
Teraz w moim kontrolerze:
$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.
Na tej stronie pokazuję listę wszystkich elementów w polu Wybierz. Użytkownik może wybrać jedną pozycję i dodać ją do kategorii.
Lista pozycji należących do kategorii znajduje się poniżej formularza.
Kiedy I Prześlij formularz, wybrany element zostanie dodany do Listy Pozycji kategorii i pokazany poniżej, ale nie jest przechowywany w bazie danych, a po odświeżeniu strony znika.
Czy ktoś może mi z tym pomóc? Z góry dzięki.2 answers
Twój podmiot kategorii jest odwrotną stroną relacji.
Spróbuj zmienić dodatki, aby wyglądały tak:
public function addItem(\Ako\StoreBundle\Entity\Item $item)
{
$item->addCategory($this);
$this->items[] = $item;
}
Zauważ, że zmieniłem twoje liczby mnogie na liczby pojedynczej, ponieważ masz do czynienia z pojedynczymi bytami, nie zbiorami.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-12 20:03:33
Miałem te same problemy...I think you forgot
$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/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-16 21:50:00