orm - symfony2 - En Doctrine 2, ¿se puede cambiar el modo de búsqueda(Eager/Lazy, etc.) en el tiempo de ejecución?
findby doctrine symfony2 (2)
Puede usar el método setFetchMode()
de DQL para establecer el modo. Consulte la documentación: http://readthedocs.org/docs/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#temporarily-change-fetch-mode-in-dql
Tengo entidades que me gustaría cargar con entusiasmo, y en otras ocasiones carga perezosa (o incluso extra perezosa).
Mis asignaciones no tienen ningún modo de recuperación declarado en mi YAML, por lo que utilizan el valor predeterminado (carga diferida).
Actualmente, la única forma de cargar con entusiasmo es construyendo el DQL manualmente, y necesito actualizarlo cada vez que agrego una nueva entidad.
Idealmente, solo cargaría la entidad raíz y la fuerza ansiosa por cargar todos los objetos asociados. ¿Hay alguna manera de que pueda hacer esto?
Si no es así, ¿por qué (hay una razón más allá de ser una característica no implementada)?
Si desea usar métodos de repositorio integrados (find (), findAll ()), es probable que no tenga suerte a menos que establezca cosas para cargar con impaciencia en sus anotaciones.
Probablemente querrá usar el generador de consultas (o DQL en bruto) en el método de algún repositorio personalizado para forzar la carga impaciente donde lo desee. Sí, tendrá que actualizar ese método a medida que agrega entidades, pero al menos siempre sabrá lo que está sucediendo con respecto a la carga perezosa / ansiosa, y solo tendrá que mantener todo en un solo lugar.
Supongo que la razón por la que no hay una marca $ eagerLoad para encontrar (), etc., es porque son métodos convenientes para tareas simples. Si quisiera agregar una bandera de este tipo, se habría metido rápidamente en situaciones en las que querría limitar la carga recursiva por la profundidad. Es probable que también tenga que comenzar a preocuparse por las referencias cíclicas (por ejemplo, cualquier asociación bidireccional).