Symfony 2:LIMIT Doctrine LEFT JOIN

时间:2018-02-06 12:51:49

标签: php symfony doctrine-orm pagination doctrine-query

我对Symfony 2.7中的左连接问题有疑问。

示例代码:

public function test($id, $offset, $limit)
{
    $build = $this->createQueryBuilder('building');
    $build
        ->addSelect('users', 'numbers')
        ->join('building.users', 'users')
        // limit the numbers for 1 result!
        ->leftJoin('building.numbers', 'numbers') // only select 1 result instead of more.
        ->where('building.id = :id')
        ->setParameter('id', $id);

    $paginator = new Paginator($build->getQuery(), $fetchJoinCollection = true);
    $result = $paginator->getQuery()
        ->setFirstResult($offset)
        ->setMaxResults($limit)
        ->getResult();

    return $result;
}

我现在的问题是如何实现 - > leftJoin('building.numbers','numbers')仅返回MAX 1结果。

谢谢!

Doctrine orm:2.2.3,Symfony version:2.7

1 个答案:

答案 0 :(得分:0)

如果您并不真正关心您检索的具体数字,并且只想获得一个,您可以使用拥有GROUP BY和您的{{{{}之间关联的列的buildings子句1}}。允许执行此操作的基本查询构建器如下所示:

numbers

注意:如果您使用默认的水合模式并检索对象,即使实际存在更多,$qb = $this->createQueryBuilder('building') ->addSelect('numbers') ->leftJoin('building.numbers', 'numbers') ->groupBy('numbers.building'); 集合也只会有一个条目(或没有条目)。如果您尝试根据这些部分水合的集合执行更新,则可能会产生一些问题。