usar symfony2 consultas como php doctrine doctrine-1.2

php - consultas - dql symfony2



Método de hidratación de Doctrine 1.2: matriz para modelar objeto (2)

Tengo un pequeño problema con el método Doctrine model hydrate() . Utilizo este método para hidratar un objeto de modelo de conrete de una matriz dada de la siguiente manera:

$model = new Doctrine/Model/Model; $model->hydrate($model_array);

Todo funciona perfecto cuando se hidratan objetos simples sin submodelos anidados. Ahora el problema es que necesito hidratar (utilizando este método) un objeto que tiene objetos anidados (y algunos de ellos también tienen objetos anidados).

Si estuviera usando HYDRATE_RECORD , estaría bien, pero todos los registros de la consulta se devolverían como objetos, lo que significa más consumo de memoria. Por lo tanto, estoy usando HYDRATE_ARRAY y bajo demanda hidrato esa matriz de concreto a un objeto.

Supongamos que tengo un modelo A que tiene modelos anidados AB, AC (de uno a muchos), AD y AC tiene otro modelo anidado ACE. Después de print_r de la matriz A, pudimos ver esta estructura:

A Array ( ... ab Array ( ... ) ac Array ( AC Array ( ... ace Array ( ... ) ) AC Array ( ... ace Array ( ... ) ) ... ) ad Array ( ... ) )

Normalmente, después de usar hidrato, supongo que este sería mi objetivo:

A Object { ... ab Object { ... } ac Array ( AC Object { ... ace Object { ... } } AC Object { ... ace Object { ... } } ... ) ad Object { ... } }

Pero en lugar de esto obtengo esta estructura:

A Object { ... ab Array ( ... ) ac Array ( AC Array ( ... ace Array ( ... ) ) AC Array ( ... ace Array ( ... ) ) ... ) ad Array ( ... ) }

Entonces, solo el modelo principal se convirtió a un objeto. ¿Conoces una forma de conseguir que todas las matrices de modelos anidados se conviertan en objetos como el supuesto resultado?

Y no, no puedo usar HYDRATE_RECORD cuando HYDRATE_RECORD el DB.


Tratando de responder a esto lo mejor de mi conocimiento de Doctrine, que no es mucho porque nunca me ocupé directamente de la hidratación.

El problema con el uso de una matriz como método de hidratación es que básicamente pierdes todos los metadatos que se adjuntaron a la consulta original, sobre todo los nombres de la tabla.

Una solución a esto podría ser escribir su propio método de hidratación que convierta la matriz de nuevo en objetos.


Revisando la documentación si se topa con esto .

¿Has intentado fromArray lugar de hydrate ?