原则中fetch =“EAGER”和fetch =“LAZY”有什么区别?

在Doctrine的注释@ManyToOnefetch="EAGER"fetch="LAZY"有什么@ManyToOne

 /** * @ManyToOne(targetEntity="Cart", cascade={"all"}, fetch="EAGER") */ /** * @ManyToOne(targetEntity="Cart", cascade={"all"}, fetch="LAZY") */ 

简单地解释一下,当你加载一个实体时,如果它与一个或多个实体有联系,那么学说应该做什么?

如果关联被标记为EAGER ,则它将获取并加载关联的实体。

如果关联被标记为LAZY ,则教条将创build代理对象(虚拟对象)来代替实际的实体。 只有当你第一次调用这个关联的实体时(例如$cart->getItems() ),doctrine才会从数据库中获取并加载这个对象。

请参阅: http : //docs.doctrine-project.org/en/latest/reference/advanced-configuration.html#association-proxy

有关它们之间的区别的附加信息:

(fetch = "EAGER")

只要原始查询目标实体从原则中加载,相关实体就会被提取。 这意味着在数据库上没有额外的SQL查询。

(fetch = "LAZY")

仅当原始查询目标实体调用引用方法(如$cart->getItems() ,才会获取关联的实体。 这意味着,在数据库上有additional SQL查询。