2015-04-26 92 views
0

我想使用ajax更新實體,但它增加了一個新行,而不是更新現有的。更新的實體添加新行到數據庫

我的實體:

  • 類別
  • 產品
  • 子目錄

關係

類別ManyToMany產品

類別OneToMany子目錄

類別實體

/** 
    * @ORM\ManyToMany(targetEntity="Test\CoreBundle\Entity\Product", inversedBy="categories", cascade={"persist"}) 
    * @Groups({"public", "admin"}) 
    */ 
    protected $products; 



public function setProducts($products) { 
     $this->products= new ArrayCollection($products->toArray()); 
     return $this; 
    } 

產品實體

/** 
    * @ORM\ManyToMany(targetEntity="Test\CoreBundle\Entity\Category", mappedBy="products") 
    * @Exclude() 
    */ 
    protected $categories; 

控制器

$toSave = $this->get('request')->getContent(); 


     $s = $serializer->deserialize($toSave, Test\CoreBundle\Entity\Category, 'json'); 


       if ($s->getId() > 0) { 


        $category= $em->getRepository('TestCoreBundle:Category)->findOneBy(['id' => $s->getId()]); 

        $category->setName($s->getName()); 
        $category->setIsDisabled($s->getIsDisabled()); 
        $category->setIsPrivate($s->getIsPrivate());  
        $category->setQuestions($s->getCategories()); 

        $em->persist($category); 
        $em->flush(); 
       } 

問題:

該代碼添加新產品數據庫,我想更新現有記錄。

事情我想:

  • merge替換persist,沒有什麼區別。
  • 移除persist,相同的結果
+0

刪除'$ EM->堅持($類);'和'試$ EM->齊平($類);' – tzafar

+0

@tzafar同樣的問題 – giannisf

+0

在類別實體中從'ManyToMany'關係中刪除'cascade = {「persist'}'並刪除'$ em-> persist($ category);'並嘗試'$ em-> flush($ category) ;' – tzafar

回答

1

我解決了這個問題的方式如下:

1)I代替persistmerge

$em->merge($category); 
    $em->flush(); 

2)改變了級聯選項從堅持到合併

/** 
    * @ORM\ManyToMany(targetEntity="Test\CoreBundle\Entity\Product", inversedBy="categories", cascade={"merge"}) 
    * @Groups({"public", "admin"}) 
    */ 
    protected $products; 
相關問題