具有ManyToMany关系的Doctrine查询

时间:2013-10-27 19:25:16

标签: sql symfony doctrine

我在两个实体“文章”和“类别”(对于博客)之间有一个简单的关系ManyToMany。我想获取具有特定类别的每篇文章,但我不知道如何创建该查询。我做的是:

$query = $em->createQuery(
        'SELECT u
        FROM SiteBlogBundle:article u
        WHERE u.categorie.name = :cat
        ORDER BY u.date DESC'
    )
        ->setParameter('cat', '$cateogory')

WHERE u.categorie.name = :cat行不起作用。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

如果你可以使用查询构建器来获得更好的可读性而不是DQL:

$articles = $em
    ->getRepository('SiteBlogBundle:Article')
    ->createQueryBuilder('article')
        ->leftJoin('article.category', 'category')
        ->where('category.name = :category_name')
        ->orderBy('article.date', 'DESC')
        ->setParameter('category_name', $category->getName())
        ->getQuery()
        ->getResult()
;

但我强烈建议您将此查询放入存储库,如下所示:

// ArticleRepository.php

public function findArticlesByCategoryName($name)
{
    return $this->createQueryBuilder('article')
        ->leftJoin('article.category', 'category')
        ->where('category.name = :category_name')
        ->orderBy('article.date', 'DESC')
        ->setParameter('category_name', $name)
        ->getQuery()
        ->getResult()
    ;
}

然后在你的控制器里面做:

public function getArticles(Category $category)
{
   $em = $this->getDoctrine()->getEntityManager();
   return $em->
       getRepository('SiteBlogBundle:Article')
       ->findArticlesByCategoryName($category->getName())
   ;
}