学说2表现答案

时间:2017-03-29 19:25:01

标签: php doctrine-orm doctrine

我有一个问题,我使用了4年的学说,但我不知道他们在搜索对象时是否加载了实体(包括关系)的所有数据,例如:

$entity = $entityManager->find('Entity', $id);

在这种情况下,是否设置了所有关系属性?

我有一个具有很多关系属性的类(WITHOUT featch = eager),它的原因是否过载?

或者说,当你使用属性的get方法时,doctrine知道只搜索关系吗?

如果您知道文档,请澄清,请发布链接

1 个答案:

答案 0 :(得分:1)

延迟加载是默认设置。收集数据仅在首次访问时从数据库中检索。

如果要直接加载数据,则需要加入特定的集合,并将其添加到select子句中。或者像你提到的那样使用EAGER提取模式。

来自http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/working-with-objects.html#entity-object-graph-traversal

  

[...]而不是传回真正的作者实例和评论集合,而不是Doctrine将为您创建代理实例。只有当您第一次访问这些代理时,它们才会通过EntityManager并从数据库加载它们的状态。

此外:

  

遍历对象图形以获取延迟加载的部分将很容易触发大量SQL查询,并且如果习惯性很大,则会执行得很糟糕。确保使用DQL尽可能高效地获取所需的对象图的所有部分。