Doctrine - 在一个查询中获取实体和关系

时间:2012-11-09 20:48:17

标签: symfony doctrine-orm

我是否错过了Doctrine的观点?它对某些场景非常有用,但是对于使用Id检索实体的基本场景(比如使用find()或findOneBy()),为什么会看到为每个关系填充主体实体属性的查询?

当然,通过我创建的映射/注释,Doctrine应该能够进行一些连接和一个查询,而无需为每个实体的检索编写DQL查询。

或者,正如我所预测的那样,我在某个地方错过了这一点!

2 个答案:

答案 0 :(得分:6)

只需将相关实体的别名添加到查询的select部分即可。

假设您有Book个与Cover相关的一对多,并且您希望选择一些带有封面的书籍。

使用查询构建器,使用:

->createQueryBuilder()
->select("book, cover")
->from("Book", "book")
->leftJoin("book.covers", "cover")

使用查询,请使用:

SELECT book, cover FROM Book book LEFT JOIN book.covers cover

结果,您将收到预先填充Book集合的$covers集合。

答案 1 :(得分:1)

因为关系仅在需要时才会被水合 - 默认情况下,Doctrine使用延迟加载策略。 如果您已经知道将访问相关实体,则应构建一个DQL查询来检索记录和相关实体。