Quelle est la bonne façon de générer une commande par comme ORDER BY myfunction(col, ?, ?) DESC
avec des valeurs de liaison dans DBIx::Class
?
Actuellement, j’utilise le SQL littéral pour cela, mais cela n’est pas optimal pour plusieurs raisons.
$rs->search(undef, { order_by => "myfunction(col, $v1, $v2) DESC" });
Réponses:
4 pour la réponse № 1Quelque chose comme ça:
$rs->search(
undef,
{
"+columns" => [{
"res" => {
"func" => ["me.col", ["?" => $val1], ["?" => $val2]],
"-as" => "res",
},
}],
"order_by" => {"-desc" => "res"},
}
);
va générer (pour MySQL & ($val1, $val2) = qw(val1 val2)
):
SELECT `me`.`id`, ..., FUNC( `me`.`col`, ?, ? ) AS `res`
FROM `table` `me`
ORDER BY `res` DESC:
"val1",
"val2"
2 pour la réponse № 2
J'ai réussi à obtenir DBIx::Class
générer le bon ORDER BY
. Voici le code:
$rs->search(undef, {
order_by => [
"myfunction(mycol, ?, ?) DESC", map [dummy => $_], $v1, $v2
]
});