2012-01-16 10 views
4

から私がおかしくなりそうです。削除子コレクションは、親

これは、親である:

class Parent { 
    /** 
    * @Id 
    * @GeneratedValue 
    * @Column(type="integer") 
    */ 
    protected $id; 

    /** 
    * @OneToMany(targetEntity="Core\Parent\Child", mappedBy="parent", cascade={"persist", "remove"}) 
    */ 
    protected $children; 


    public function __construct() { 
     $this->children = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 


    public function getChildren() { 
     return $this->children->toArray(); 
    } 

    public function removeAllChildren() { 
     $this->children->clear(); 
    } 

    public function addChild($child) { 
     $this->children->add($child); 
    } 
} 

これが子供である:

class Child { 
    /** 
    * @Id 
    * @GeneratedValue 
    * @Column(type="integer") 
    */ 
    protected $id; 

    /** 
    * @ManyToOne(targetEntity="Core\Parent", inversedBy="children") 
    * @JoinColumn(name="parent_id", referencedColumnName="id") 
    */ 
    protected $parent; 
} 

この親のために、すべての既存の子を削除しているものを私のために働いていません。私のコントローラから、私は:

$parent = $em->getRepository('Core\Parent')->find(1); 
$parent->removeAllChildren(); 

この時点で、私はgetChildren()を呼び出すことができ、それが空です。私のスクリプトが終了する前に、私はまた、実行します。$em->flush();

は、しかし、私はデータベースのテーブルをチェックし、データがまだあります!私はそれを得ていないし、それは私を狂ってしまう。この親の既存の子をすべて削除するにはどうすればよいですか?

答えて

8

あなたが持っている可能性が例えば

/** 
* @OneToMany(
* targetEntity="Core\Parent\Child", 
* mappedBy="parent", 
* orphanRemoval=true, 
* cascade={"persist", "remove"} 
*) 
*/ 
protected $children; 
+0

OMGを!これだよ。 – Vic

+0

しかし、子供はそれへの他の参照を持っていない場合は、 'orphanRemoval = true'にのみ機能します。追加の参照を追加すると、これはもう動作しません。 – tobain

-1

Orphan Removalオプションを使用する必要があります。ありがとう、

$parent = $em->getRepository('Core\Parent')->find(1); 
foreach($parent->getChildren() as $child) { 
    $em->remove($child); 
} 
$parent->removeAllChildren(); 
$em->flush(); 
関連する問題