如何在Doctrine查询中设置结果模式?

时间:2019-06-29 13:00:26

标签: php symfony doctrine

我想为前端创建一个JSON客户API,为此我将Symfony与Doctrine结合使用。在客户存储库中,有以下代码:

public function getCustomerById($customerId) {
    return $this->createQueryBuilder('c')
    ->andWhere('c.customerId = :id')
    ->setParameter('id', $customerId)
    ->getQuery()
    ->getResult();
}

使用该代码,我得到一个包含客户实体或表的所有列的数组。我也有两个ManyToOne关系,例如用户。上面的查询还从该用户表中选择所有列,并将数据放入一个额外的键中,这正是我想要的,但不是所有的列,例如我不希望密码出现在结果中。那么,有没有一种简单的方法可以指定仅应从联接表中查询哪些列,还是需要从我想要的客户和用户中选择所有列?

如果我尝试在结果中指定列的情况下使用后者,则所有列都位于数组的一个级别中(用户数据未在额外的键下合并)。

预期结果/数组应为:

...
firstName: '',
lastName: '',
user: 
    userId: 1,
    userName: '',
creationDate: '',
...

如何获得这样的结果并在上面的用户这样的额外键中合并连接的表列,而又没有从一个数组到另一个数组的额外数据映射?

1 个答案:

答案 0 :(得分:0)

当我使用部分选择时,会得到以上结果

SELECT partial c.{customerId, ...}, partial u.{userId, userName} ...

尽管如此,它返回一个包含所有列的数组,但未选择的列为null。使用水合模式HYDRATE_ARRAY,它们就消失了。