Symfony2查询构建器连接以将对象作为单个数组获取

时间:2015-08-12 09:15:05

标签: symfony doctrine-orm

我有几个没有设置关系的实体。目前我有一个查询:  $ qb = $ this-> getEntityManager() - > createQueryBuilder();

    $qb->select('post, user')
        ->from('PostBundle:Post', 'post')
        ->leftJoin('UserBundle:User', 'user', 'WITH', 'post.createdBy = user.id')
        ->groupBy('post');

    $result = $qb->getQuery()->getResult();

问题在于,通过这种方式,我将帖子和用户作为不同的数组元素。类似的东西:

[
    [
       'id'=> post.id,
       'text' => post.text
    ],
    [
       'id'=> user.id,
       'name' => user.name
    ],
    [
       'id'=> post.id,
       'text' => post.text
    ],
    [
       'id'=> user.id,
       'name' => user.name
    ],
    ...
]

如果我将查询的选择更改为:

$ qb-> select('post,user.id')

我得到了

[
    [
       'id'=> post.id,
       'text' => post.text,
       'user.id' => user.id,
    ],
    [
       'id'=> post.id,
       'text' => post.text,
       'user.id' => user.id,
    ],
    ...
]

但我真正需要的是获取整个用户对象而不是单个字段,所以我的结果看起来像这样:

 [
        [
           'id'=> post.id,
           'text' => post.text,
           'user' => [
               'id' => user.id,
               'name' => user.name,
        ],
        [
           'id'=> post.id,
           'text' => post.text,
           'user' => [
               'id' => user.id,
               'name' => user.name,
        ],
        ...
    ]

我尝试了不同的分组选项但没有成功。我如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

您可以在Post存储库类中使用以下查询。将返回PostBundle:作为结果发布对象。要检索用户,请使用$ post-> getUser();

$query = $this->createQueryBuilder('post')
              ->leftJoin('UserBundle:User', 'user', 'WITH', 'post.createdBy = user.id');
              ->groupBy('post');

$result = $qb->getQuery()->getResult();