【问题标题】:Symfony2 query builder joins to get objects as a single arraySymfony2 查询构建器连接以将对象作为单个数组获取
【发布时间】:2015-11-04 19:20:19
【问题描述】:

我有几个没有设置关系的实体。目前我有一个查询: $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,
        ],
        ...
    ]

我尝试了不同的分组选项,但没有成功。我如何做到这一点?

【问题讨论】:

  • 恐怕,如果你没有实体之间的任何关系,你就无法依靠教义来获得你所需要的。

标签: symfony doctrine-orm


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2023-04-08
    • 2012-11-30
    • 1970-01-01
    • 2016-10-08
    • 2014-01-29
    相关资源
    最近更新 更多