我在两个实体“文章”和“类别”(对于博客)之间有一个简单的关系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
行不起作用。我怎样才能做到这一点?
答案 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())
;
}