2012-04-19 52 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