Maison > Questions et réponses > le corps du texte
yii en orderBy,
, maintenant le sql imprimé, et le sql dont j'ai besoin est comme ça, s'il vous plaît dites-moi comment résoudre ce problème, ceci est basé sur l'ordre par champ (id, 5, 3, 8) dans mysql . De plus Un point, je souhaite implémenter un tri spécial d'un certain champ dans le framework Yii. Existe-t-il une autre méthode que le tri par champ ? J'ai vérifié plusieurs erreurs causées par le symbole "`" ?
三叔2017-06-20 10:09:49
->orderBy(["FIELD(step, 'star', 'person', 'team')" => true])
C'est possible, mais je n'ai pas regardé attentivement le code sous-jacent. . . Mais cela devrait résoudre le problème
/**
* @param array $columns
* @return string the ORDER BY clause built from [[Query::$orderBy]].
*/
public function buildOrderBy($columns)
{
if (empty($columns)) {
return '';
}
$orders = [];
foreach ($columns as $name => $direction) {
if ($direction instanceof Expression) {
$orders[] = $direction->expression;
} else {
$orders[] = $this->db->quoteColumnName($name) . ($direction === SORT_DESC ? ' DESC' : '');
}
}
return 'ORDER BY ' . implode(', ', $orders);
}
Il s'agit d'une méthode pour générer une instruction orderby, donc true n'a aucun effet réel, mais elle n'est pas égale à SORT_DESC et devient alors vide,
La façon la plus officielle de l'écrire est la suivante :
orderBy([new Expression("FIELD(step, 'star', 'person', 'team')")])