with manytomany many foreign fields orm doctrine2 doctrine-orm many-to-many

orm - foreign - manytomany doctrine symfony



¿Cuál es la diferencia entre fetch="EAGER" y fetch="LAZY" en doctrina (2)

¿Cuál es la diferencia entre fetch="EAGER" y fetch="LAZY" en la anotación @ManyToOne en Doctrine?

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


Información adicional sobre la diferencia entre ellos:

(fetch = "EAGER")

las entidades asociadas se recuperarán tan pronto como la entidad de destino de la consulta original se cargue desde la doctrina. Eso significa que no hay una consulta SQL adicional en la base de datos.

(fetch = "LAZY")

las entidades asociadas se recuperarán SOLO SI la entidad de destino de la consulta original llama al método de referencia, como $cart->getItems() . Eso significa que hay additional consulta SQL additional en la base de datos.


Para explicarlo simplemente, cuando está cargando una entidad y si tiene una asociación con una o más entidades, ¿qué debe hacer la doctrina?

Si la asociación está marcada como EAGER , también buscará y cargará la entidad asociada.

Si la asociación está marcada como LAZY , la doctrina creará objetos proxy (objetos ficticios) en lugar de la entidad real. Solo cuando realiza la primera llamada a esa entidad asociada (como $cart->getItems() ), la doctrina buscará y cargará ese objeto (s) de la base de datos.

Consulte: https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/advanced-configuration.html#association-proxies