原则中fetch =“EAGER”和fetch =“LAZY”有什么区别?
在Doctrine的注释@ManyToOne
中fetch="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查询。