主义多对多关系选择

时间:2013-10-16 20:36:41

标签: symfony doctrine-orm doctrine

我有以下数据模型: 我有可以发帖的类别。那些艺术品可以有很多类别。 NowIi想要从一个类别中选择所有文章。

到目前为止我尝试的是:

 $qb = $this->_em->createQueryBuilder()
        ->select('c, p')
        ->from('...Blog\Category', 'c')
        ->leftJoin('c.posts', 'p')
        ->where('c.id = :id')
        ->orderBy('p.created', 'DESC')
        ->setParameter(':id', $catId);

现在我想将这个查询提供给一个分页包,它希望得到所有帖子的列表。

问题是,此查询返回“类别”对象。

如何才能从某个类别中获取帖子?

我正在使用Symfony 2和KnpPaginatorBundle

2 个答案:

答案 0 :(得分:0)

我建议您在另一个查询中选择特定类别的帖子。

备选方案 - 以及您要求的内容 - 可能与ArrayCollections一起使用:http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html#initializing-collections 因此,您可以从Category对象中获取所有帖子。

答案 1 :(得分:0)

查询错误。当您执行左连接时,它会从左表中选择行。只需翻转它们。

$qb = $this->_em->createQueryBuilder()
        ->select('c, p')
        ->from('c.posts', 'p')
        ->leftJoin('...Blog\Category', 'c')
        ->where($qb->expr()->andX(
           $qb->expr()->eq('c.id', ':id'),
           $qb->expr()->eq('p.category_id', 'c.id')
         )
        ->orderBy('p.created', 'DESC')
        ->setParameter(':id', $catId);