使用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'); // ???
我的目标是在执行查询时仅选择Person
和Address
对象的一部分以提高内存效率。
答案 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
(两种方法的签名相同)。