在symfony 2应用程序中,我有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');
我的结果应该是:
1,Ben,Tooch,2014-10-15 18:45:00
7,John,Snow,2014-10-16 17:15:00
...
我尝试使用paginator功能但没有任何成功 非常感谢你的帮助。
答案 0 :(得分:5)
当我添加更多列时,我必须找到另一种方法来实现它。我终于得到了一个有效的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');
答案 1 :(得分:0)
您是否尝试输出生成的SQL并运行它?
我不确定你是否可以在这样的左连接中使用maxresults和firstResult,但如果你的想法只是为了恢复用户和他们的最后一次集合,你可以使用max(i.date)和group by p.id,p.last_name,p.first_name。
但是如果你想要翻页,只需加入两个表并按i.date排序。
希望它有所帮助!
答案 2 :(得分:0)
尝试 groupBy 您要设置 MaxResults 的实体。