【发布时间】:2017-02-04 21:49:00
【问题描述】:
我有一张与作者表相关的帖子表。这两个表都与第三个表(喜欢)相关,该表指示哪些用户喜欢了哪些帖子。我想选择作者和喜欢的帖子,但不知道在获取结果后如何访问连接的对象。我的查询生成器如下所示:
$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)没有与帖子交互,则 like 值可能为 null。查询工作正常,但我无法访问别名 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
如何访问查询中指定的数据?
【问题讨论】:
-
你试过
select('p', 'a', 'l')吗? -
我相信您在使用实体时尝试做的事情是不可能的。但是,如果您愿意在这种情况下使用数组,则有可能。为此,只需使用
->getArrayResult()。 -
@EmanuelOster getArrayResult() 看起来更近了,但我仍然看不到 post_author 或 post_liked 键。有没有办法选择连接表作为别名?
标签: php mysql symfony doctrine-orm