繁体   English   中英

Doctrine / Symfony查询构建器在左连接上添加select

[英]Doctrine/Symfony query builder add select on left join

我有一张与作者表相关的帖子表。 两个表都与第三个表(喜欢)相关,表示哪些用户喜欢哪些帖子。 我想选择作者和喜欢的帖子,但不知道如何在获取结果后访问连接的对象。 我的查询构建器如下所示:

$result = $em->createQueryBuilder()
             ->select('p')              
             ->from('Post', 'p')
             ->leftJoin('p.author', 'a')
             ->leftJoin('p.likes', 'l', 'WITH', 'l.post_id = p.id AND l.user_id = 10')
             ->where("p.foo = bar")
             ->addSelect('a AS post_author')
             ->addSelect('l AS post_liked')
             ->getQuery()->getResult();

在上文中,作者将始终有效,其中如果请求用户(示例中的用户10)未与帖子交互,则相似值可以为空。 查询工作正常,但我无法访问别名post_author或post_liked的数据。 结果数据如下所示:

[
  [0] => Doctrine PostEntity,
  [1] => Doctrine PostEntity,
  ...
]

我想要一些看起来更像是这样的东西:

[
  [0] => ['post' => Doctrine PostEntity, 
          'post_author' => Doctrine UserEntity, 
          'post_liked' => Doctrine LikeEntity],
  [1] => ['post' => Doctrine PostEntity, 
          'post_author' => Doctrine UserEntity, 
          'post_liked' => Doctrine LikeEntity],
  ...
]

如果我只是尝试加载作者,那就没事了,因为我可以从加载的帖子加载作者值(Doctrine自动用来自作者表的选定连接数据来保护对象)。 例如:

$post = $result[0];
$author = $post->getAuthor(); // Doctrine UserEntity

如果我尝试为当前用户加载类似的问题,则会出现此问题。 例如:

$post = $result[0];
$like = $post->getLike(); // INVALID - there's no property "like" on Post
$likes = $post->getLikes(); // valid, but loads the whole collection
$like = $post->post_liked; // INVALID - the SQL alias is not a valid object property 

如何访问查询中指定的数据?

我最终使用$query->getArrayResults() ,它根据在doctrine配置中的关联命名来填充具有集合的数组。 查询中的AS关键字仅用作查询本身的钩子,而不是输出数组/实体水合。

有关示例的完整解决方案,请参阅我的答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM