【问题标题】:Partial select of left joined table with doctrine query builder使用教义查询生成器对左连接表进行部分选择
【发布时间】:2018-02-16 08:51:52
【问题描述】:

当使用教义查询构建器查询一个表时,部分选择可以这样写:

$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 对象的一部分以提高内存效率。

【问题讨论】:

    标签: doctrine


    【解决方案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(两种方法的签名相同)。

    【讨论】:

    • 嗨,我如何将字段名称:部分人。{id,名称} -> 更改为部分人。{id,名称为custome_name}? asdosnt 工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 2016-11-16
    • 1970-01-01
    相关资源
    最近更新 更多