2012-04-19 16 views
1

からの削除 - ユーザードクトリン2.1 -</p> <p>私のエンティティ..私は、私は私の最後のウェブサイト上でこれをやって覚えて親エンティティからコメントを削除しようとしていますが、今、それは働いていないコレクション

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:
ストレートI removeElementた後、私は、ユーザーID = 23のデータセットを通じてループ、およびコメントデータid375はそこにはないのでコレクションから削除しましたがDBからは削除しませんでした。$em->flush()はこれを行うと考えていましたか?


おかげ

マッピングがコメントに保持されているので、あなたはあなたが状態を保存であろうあなたのフラッシュの前に参照を削除するには、このエンティティを削除する必要が

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

を使用する必要が

+1

フラッシュする前に、$ userResultsを保持するようにentitymanagerに指示する必要はありませんか? – xanido

答えて

5

を教えてくださいdbに。

+0

しかし、これは完全にDBからのコメントを削除します(まさにOPが必要とするものです)。しかし、どのように2つのエンティティ間の関連付けだけを削除するのですか? –

+0

ねえ、ありがとう、でもまだコレクションからこのコメントを解除する必要がありますか?またem-> remove? –

+0

アソシエーションを削除するだけの場合は、コメント内の参照を解除し、 'unset($ commentToDelete-> author);を削除してください。 $ em-> flush(); 'コメントを削除する場合は、削除してからフラッシュする前に設定を解除する必要はありません。コメントについてのユーザーテーブルには、データが格納されていないことに注意してください。 Doctrineはマッピングを介してUserモデル内のコメントにアクセスできます。 –

関連する問題

 関連する問題