Doctrine 如何限制带原则的左连接(DQL)的结果

Doctrine 如何限制带原则的左连接(DQL)的结果,doctrine,left-join,limit,Doctrine,Left Join,Limit,在symfony 2应用程序中,我有两个实体,它们由一个oneToMany关系映射(用户和集合)。 我正在尝试搜索我的用户实体,并为找到的每个用户加入上次约会。 这个想法是这样的: $qb = $this->createQueryBuilder('p'); $qb->select('p.id, p.last_name, p.first_name') ->leftJoin('p.rendezvous', 'i') ->

在symfony 2应用程序中,我有两个实体,它们由一个oneToMany关系映射(用户和集合)。 我正在尝试搜索我的用户实体,并为找到的每个用户加入上次约会。 这个想法是这样的:

    $qb = $this->createQueryBuilder('p');

    $qb->select('p.id, p.last_name, p.first_name')
       ->leftJoin('p.rendezvous', 'i')
            ->select('i.date')
            ->where('i.user = p.user')
            ->orderBy('i.date', 'DESC')
            ->setFirstResult(0)
            ->setMaxResults(1)                
       ->where('p.user IN ('.$users.')')
       ->orderBy('p.last_name', 'ASC')
       ->addOrderBy('p.first_name', 'ASC');
我应该有如下结果:

本,图奇,2014-10-15 18:45:00
约翰,斯诺,2014-10-16 17:15:00

我尝试使用paginator函数,但没有成功。

非常感谢您的帮助。

您是否尝试输出生成的SQL并运行它

我不确定您是否可以在这样的左连接中使用maxresults和firstResult,但如果您的想法只是恢复用户及其上次约会,则可以使用max(I.date)和group by p.id、p.last_name、p.first_name

但是如果您想分页,只需将两个表连接起来,然后按i.date排序即可


希望有帮助

当我添加更多要获取的列时,我必须找到另一种方法。我终于得到了一个有效的DQL查询:

$qb->select('p.id, p.last_name, p.first_name, r.date, r.othercolumn')
    ->leftJoin('p.rendezvous', 'r', 'WITH', 'p.id = r.user AND r.date = (SELECT MAX(r2.date) FROM \App\YourBundle\Entity\Rendezvous as r2 WHERE r2.user = p.id)')               
    ->where('p.user IN ('.$users.')')
    ->orderBy('p.last_name', 'ASC')
    ->addOrderBy('p.first_name', 'ASC')
    ->groupBy('p.id');

尝试按要设置MaxResults的实体分组。

使用max(i.date),groupBy已完成此工作。谢谢您好,这不起作用:嵌入的SELECT将只检索一个最长日期一次,并忽略不在该日期的所有其他rendez VOU,即使对于其余行也是如此。换句话说,对于整个请求,嵌入的SELECT只执行一次。是的,我们希望每一行只有最后的集合日期。问题是关于使用->setFirstResult(0)->setMaxResults(1),但无法在左连接查询中使用,因为在这种情况下,条令错误不支持限制