使用symfony2但它更像是mysql问题......
我认为我有很好的表格模式(只是重要的字段)(代码是自解释的):
用户(id) 状态(id) 喜欢(id,user_id,status_id) comments(id,user_id,status_id)
我正在做大选择。
试着这个:
$qb=$this->createQueryBuilder('s')
->addSelect('u')
->addSelect('u2')
->addSelect('u3')
->addSelect('l')
->addSelect('c')
->addSelect('s2')
->where('s.user = :user')
->setParameter('user', $user)
->innerJoin('s.user', 'u')
->leftJoin('s.likes', 'l')
->leftJoin('l.user', 'u2')
->leftJoin('s.comments', 'c')
->leftJoin('c.user', 'u3')
->leftJoin('c.status', 's2')
->orderBy('s.time', 'DESC')
->setMaxResults(15);
但结果是相同的状态......错误。
当我选择状态时,它运作良好...喜欢状态..和用户(喜欢和状态的作者)
就像那样:
SELECT * FROM statuses s0_
INNER JOIN users t1_ ON s0_.user_id = t1_.id
LEFT JOIN status_likes s2_ ON s0_.id = s2_.status_id
INNER JOIN users t3_ ON s2_.user_id = t3_.id
WHERE s0_.user_id = 25 ORDER BY s0_.time DESC LIMIT 15
非常好用,但我如何实现另一条评论和(用户 - >评论的作者)选择那里?...
答案 0 :(得分:1)
您无法以尝试的方式在已加入的查询中设置最大结果。
您需要使用此处所述的分页器: http://docs.doctrine-project.org/en/latest/tutorials/pagination.html
如果它在你的Doctrine版本中不可用(你是2.2之前的版本)那么你可以在这里使用paginator: https://github.com/beberlei/DoctrineExtensions
另一种选择是不在查询中执行连接 - 而只是允许自动获取连接的数据。因此,遍历用户并遍历对象图以获取所需的信息。这显然会发出更多的疑问:
$users = $userRepository->findById($user);
$i = 0;
for ($users as $user){
$likes = $user->getLikes();
$comments = $user->getComments();
$i++;
if ($i == 15) { break; }
}
编辑:将'继续'更改为'休息';无论如何这都是糟糕的代码 - 不要使用它,我只是在说明一个替代方案。
最后,您可以使用本机查询来执行此操作:
http://docs.doctrine-project.org/en/2.1/reference/native-sql.html
编辑:类似问题:Limiting a doctrine query with a fetch-joined collection?