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?