[英]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.