2012-04-19 53 views
1

刪除我試圖刪除父實體,我記得我上次的網站這樣評論,但現在它不工作..學說2.1 - 從收集

我的實體 - 用戶

namespace Application\Entities; 

use Doctrine\ORM\Mapping AS ORM, 
    Doctrine\Common\Collections\ArrayCollection; 

/** 
* Loan 
* 
* @ORM\Table(name="users") 
* @ORM\Entity 
*/ 
class Users{ 

    /** 
    * @var integer $id 
    * 
    * @ORM\Column(type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 


    /** 
    * @var string $username 
    * 
    * @ORM\Column(type="string", length=45, nullable=false) 
    */ 
    private $username; 

    /** 
    * @var ArrayCollection 
    * 
    * @ORM\OneToMany(targetEntity="Comments", mappedBy="author", cascade={"persist", "remove"}) 
    */ 
    private $comments; 

    public function getComments(){ 

      return $this->comments;    

    } 

和我的意見表:

namespace Application\Entities; 

    use Doctrine\ORM\Mapping AS ORM, 
     Doctrine\Common\Collections\ArrayCollection; 

/** 
* Loan 
* 
* @ORM\Table(name="comments") 
* @ORM\Entity 
*/ 
class Comments{ 

    /** 
    * @var integer $id 
    * 
    * @ORM\Column(type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 


    /** 
    * @var integer $user_id 
    * 
    * @ORM\Column(type="integer", length=15, nullable=false) 
    */ 
    private $user_id 

    /** 
    * @var Loan 
    * 
    * @ORM\ManyToOne(targetEntity="Users", inversedBy="comments",cascade={"persist"}) 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
    * }) 
    */ 
    private $author; 

這是好的,它的工作原理和我打電話的用戶資源庫評論所有集合..

現在,我通常這樣做時,我需要刪除:

$commentToDelete = $this->em->getRepository('Entities\Comments')->findOneById(375); 
$userResults = $this->em->getRepository('Entities\Users')->findOneById(23); 
$userResults->getComments()->removeElement($commentToDelete); 
$this->em->flush(); 

沒有刪除,無論它拋出一個異常,告訴我現在也沒有。

我的學說衝它太,檢查數據庫,它仍然有..

UPDATE:
我removeElement直後,我通過用戶ID = 23的數據集循環,併爲評論數據id375不存在...所以它從收集中刪除它,但不是從數據庫中,我認爲$em->flush()應該這樣做?

請告知
感謝

+1

難道你不需要告訴entitymanager在flush之前堅持$ userResults嗎? – xanido 2012-04-19 12:42:21

回答

5

您需要使用

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

因爲映射在評論舉行您需要刪除該實體,然後沖洗,以去除引用這將節省狀態到數據庫。

+0

但是,這將完全從數據庫中刪除註釋(這正是OP需要的)。但是,如何刪除兩個實體之間的關聯? – 2012-04-20 05:06:38

+0

嘿,謝謝,但是我還需要取消集合中的這個評論嗎?以及em-> remove? – 2012-04-20 06:22:14

+0

如果您只想刪除關聯,只需在註釋中取消設置並刷新'unset($ commentToDelete-> author); $ EM->沖洗();」。如果你想刪除評論,你不需要取消設置,然後刪除然後刷新。請記住,Users表中沒有關於評論的數據。學說只是讓你通過映射訪問用戶模型中的評論。 – 2012-04-20 12:18:57