Doctrine中注释fetch="EAGER"
中的fetch="LAZY"
和@ManyToOne
之间有什么区别?
/**
* @ManyToOne(targetEntity="Cart", cascade={"all"}, fetch="EAGER")
*/
/**
* @ManyToOne(targetEntity="Cart", cascade={"all"}, fetch="LAZY")
*/
答案 0 :(得分:78)
简单地解释一下,当你加载一个实体并且它与一个或多个实体有关联时,学说应该做什么?
如果关联标记为 EAGER ,它也会获取并加载关联的实体。
如果关联标记为 LAZY ,则doctrine将创建代理对象(虚拟对象)来代替实际实体。只有当您第一次调用该关联实体(如$cart->getItems()
)时,doctrine才会从数据库中获取并加载该对象。
答案 1 :(得分:20)
有关它们之间差异的其他信息:
(fetch = "EAGER")
一旦从doctrine加载原始查询目标实体,就会获取关联的实体。这意味着DB上没有其他SQL查询。
(fetch = "LAZY")
仅在原始查询目标实体调用引用方法(例如$cart->getItems()
)时才会获取关联实体。这意味着,DB上有additional
个SQL查询。