使用doctrine查询构建器部分选择左连接表

时间:2018-02-16 08:51:52

标签: doctrine

使用doctrine查询构建器查询一个表时,可以像这样编写部分选择:

$queryBuilder = $this->createQueryBuilder('person');
$queryBuilder->addSelect('partial person.{id, name}');

如何为左连接表编写部分选择?我试过这样的事情,但无法弄清楚正确的语法:

$queryBuilder = $this->createQueryBuilder('person');
$queryBuilder->join('person.address');
$queryBuilder->addSelect('partial person.{id, name} person.address.city'); // ???

我的目标是在执行查询时仅选择PersonAddress对象的一部分以提高内存效率。

1 个答案:

答案 0 :(得分:1)

您的连接操作的语法已关闭。使用join时必须提供别名。从那里,您可以使用相同的语法来查询部分Address对象:

// In a method of PersonRepository
$qb = $this->createQueryBuilder('person')
    ->select(['partial person.{id, name}', 'partial address.{id, city}'])
    ->join('person.address', 'address');

请注意,我已将id添加到为Address检索的字段中。如果不这样做,Doctrine会给你以下错误:

  

错误:Path\To\Entity\Address的部分字段选择必须包含标识符

作为旁注,你说你想为左连接表写这个选择。如果您要执行LEFT JOIN,则需要使用leftJoin而不是join(两种方法的签名相同)。