0

SYmfony2 で簡単なブログ エンジンを作成しています。

コメント側の ManyToOne に関連する 2 つのエンティティ コメントと記事があります。

// Comment.php
/**
* @ORM\ManyToOne(targetEntity="Am\BlogBundle\Entity\Article")
* @ORM\JoinColumn(nullable=false)
*/
private $article;

記事を削除しようとすると、この記事に関連するすべてのコメントを削除したいと思います。

//Am/BlogBundle/Controller/BlogController.php

public function delArticleAction(Article $article)
{

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

    $list_tags = $em->getRepository('AmBlogBundle:Tag')
                       ->findAll();

    $list_comments = $em->getRepository('AmBlogBundle:Comment')
                       ->findBy(array('article_id'=>$article->getId()));                   

    //In order to delete an article, we have to remove each object linked to an Article
    foreach($list_tags as $value){
        $article->removeTags($value);
    }

    foreach($list_comments as $value){
        //We delete all the comments of an article
        $em = $this->getDoctrine()->getManager();
        $em->remove($value); 
        $em->flush();
    }

    // We remove the Article
    $em = $this->getDoctrine()->getManager();
    $em->remove($article); 
    $em->flush();

    return $this->render('AmBlogBundle:Blog:delArticle.html.twig');
}

実際、私は自分の記事に関連付けられたコメントのみを取得したいと考えており、タグについても同様です:/

何が間違っているのかわかりませんか?いくつかの助けがいいでしょう:)

ありがとう

4

1 に答える 1

0

エンティティ定義に onDelete="CASCADE" を追加すると、これがデータベースの外部キーに追加されるため、記事を削除すると、関連するコメントが自動的にカスケード削除されます。

/**
 * @ORM\ManyToOne(targetEntity="Am\BlogBundle\Entity\Article")
 * @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
 */
private $article;
于 2013-01-24T13:42:33.367 に答える