IT TIP

Symfony2-Doctrine : ManyToMany 관계는 데이터베이스에 저장되지 않습니다.

itqueen 2020. 12. 30. 19:59
반응형

Symfony2-Doctrine : ManyToMany 관계는 데이터베이스에 저장되지 않습니다.


Category 및 Item이라는 두 개의 PHP 모델 클래스가 있습니다. 범주에는 많은 항목이있을 수 있으며 항목은 여러 범주에 속할 수 있습니다. 두 클래스에 대해 ManyToMany 관계를 만들었습니다.

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

과:

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

이제 내 컨트롤러에서 :

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

이 페이지에서는 선택 필드의 모든 항목 목록을 보여줍니다. 사용자는 하나의 항목을 선택하여 카테고리에 추가 할 수 있습니다.

카테고리에 속하는 항목 목록이 양식 아래에 표시됩니다.

양식을 제출하면 선택한 항목이 Category 항목 목록에 추가되고 아래와 같이 표시되지만 데이터베이스에 저장되지 않고 페이지를 새로 고치면 사라집니다.

누구든지 이것으로 나를 도울 수 있습니까? 미리 감사드립니다.


범주 엔터티는 관계의 반대쪽 입니다.

addItems를 다음과 같이 변경해보십시오.

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

Note that I changed your plural names to singular, since you're dealing with single entities, not collections.


I had the same problems...I think you forgot

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

ReferenceURL : https://stackoverflow.com/questions/7044864/symfony2-doctrine-manytomany-relation-is-not-saved-to-database

반응형