Pendant plusieurs mois, pour une raison qui m’échappe, pour faire une requète du genre « SELECT * FROM matable ORDER BY length(matable.field) ASC;« , on utilisait une function postgresql directement, au lieu de passer par l’ORM (ici Propel sur symfony 1.0). Je pense que c’est du aux très vieilles versions de Propel qui ne permettait pas encore de faire des requètes avec un orderBy custom. On avait donc une classe dédiée à l’exécution de cette requète, en utilisant la connexion sql fournie par Propel. Cela fonctionnait, les résultats étaient ensuite réutilisés par Propel grâce à un populate mais cela créait parfois des problèmes à cause de l’ordonnancement des champs dans la table.
Hier, j’ai supprimé cette aberration. J’ai découvert que l’on pouvait utiliser Criteria::CUSTOM avec addAscendingOrderByColumn/addDescendingOrderByColumn. Adieu donc la requète SQL, bienvenue à:
$c->addDescendingOrderByColumn( $order_by , Criteria::CUSTOM );