querybuilder query orderby onetomany left doctrine2

query - ¿Puede Doctrine2 @OrderBy un campo calculado?



symfony doctrine querybuilder (1)

Con Doctrine 2.1 puede hacerlo directamente en la definición del modelo, pero no con @OrderBy. Puede definir fragmentos de DQL a nivel de modelo, como se indica en las notas de la versión 2.1 Beta :

Denominadas consultas DQL en metadatos: puede agregar consultas dql en los archivos de asignación usando @NamedQueries (@NamedQuery (name = "foo", query = "DQL")) y acceder a ellas a través de $ em-> getRepository () -> getNamedQuery ( )

Como tal, puede crear su consulta DQL con las palabras clave ORDER BY, algo como:

SELECT c.id, c.text, (c.voted_up / c.voted_down) AS sortkey FROM Comment c ORDER BY sortkey DESC

Entonces, imagino que agregas esta anotación a la definición del modelo, algo así como:

/** * @Entity * @Table(name="comment") * @NamedQueries(@NamedQuery(name="sortedComment", query="SELECT c.id, c.text, (c.voted_up / c.voted_down) AS sortkey FROM Comment c ORDER BY sortkey DESC")) */ class Comment { ... }

Y luego en tu llamada de código:

$em->getRepository("Comment")->getNamedQuery("sortedComment");

No probé esto, pero entiendes la idea.

Quiero ordenar ArrayCollection asociado a mi modelo con un cociente, como este (sé que el siguiente código no funciona):

/** * @OneToMany (targetEntity="Review", mappedBy="product") * @OrderBy ({"voted_up / voted_down" = "DESC"}) */ protected $reviews;

¿Es esto posible directamente en la definición del modelo o simplemente necesito usar sort () en ArrayCollection cuando ArrayCollection los datos?