2015-09-04 38 views
3

即使對象被正確更新,似乎數據不會持久,我不明白爲什麼。原則ArrayCollection刪除元素不工作

這裏是我的實體:

Article.php

​​

AttributeInArticle.php

/** 
* @var Attribute 
* 
* @ORM\ManyToOne(
*  targetEntity="XXX\DatabaseBundle\Entity\Attribute", 
*  inversedBy="attributeInArticles" 
*) 
* @ORM\JoinColumns({ 
*  @ORM\JoinColumn(
*   name="attribute_id", 
*   referencedColumnName="id") 
* }) 
*/ 
private $attribute; 

/** 
* @var Article 
* 
* @ORM\ManyToOne(
*  targetEntity="XXX\DatabaseBundle\Entity\Article", 
*  inversedBy="attributeInArticles" 
*) 
* @ORM\JoinColumns({ 
*  @ORM\JoinColumn(
*   name="article_id", 
*   referencedColumnName="id" 
*  ) 
* }) 
* 
*/ 
private $article; 

/** 
* @return Attribute 
*/ 
public function getAttribute() 
{ 
    return $this->attribute; 
} 

/** 
* @param Attribute $attribute 
*/ 
public function setAttribute($attribute) 
{ 
    $this->attribute = $attribute; 
} 

+ getter & setter for $article 

和Controller我叫它像這樣:

$article->removeAttributeInArticle($attributeInArticle); 

如果我在$ remove對象前後移除$ article對象,$ article對象在其中包含corect數據。這意味着$ attributeInArticle已被刪除。

但由於某種原因,它不會持續這些數據。

+0

你叫堅持()和flush()之後? –

+0

是的。我最終去除了物體本身...所以現在它的工作,但它不工作作爲一個真正的ArrayCollection –

回答

5

答案很簡單。

您將從Article和持續/沖洗Article中刪除Attribute。如果你看看你的映射,你會很容易注意到後者擁有ArticleAttributeInArticole之間的關係。

當您執行沖洗操作時,出於性能方面的原因,「看起來」僅僅是爲了擁有關係的一面並對其進行更改:如果沒有更改,則無需將其寫入分貝。

那麼,你可以在這裏做什麼,是直接刪除$attributeInArticle而不用擔心Article實體。

所以,基本上

$em = $this 
    ->getDoctrine() 
    ->getManager(); 

$em->remove($attributeInArticle); 
$em->flush(); 

另一種選擇是在你的Article實體$attribueInArticles使用orphanRemoval

所以,基本上,

//Article.php 

/** 
* @var AttributeInArticle 
* 
* @ORM\OneToMany(
*  targetEntity="XXX\DatabaseBundle\Entity\AttributeInArticle", 
*  mappedBy="article", 
*  orphanRemoval=true 
*) 
*/ 
private $attributeInArticles; 

$article->removeAttributeInArticle($attributeInArticle); 
+1

這正是我到底做了什麼:)我會接受這是因爲廣泛解釋爲什麼這是如此,而不是不同!謝謝! –

0

你需要cascade={"remove"}

/** 
* @var AttributeInArticle 
* 
* @ORM\OneToMany(
*  targetEntity="XXX\DatabaseBundle\Entity\AttributeInArticle", 
*  mappedBy="article", 
*  cascade={"remove"} 
*) 
*/ 

讀主義文檔:8. Working with Associations。另外檢查「孤兒刪除」