Maison  >  Questions et réponses  >  le corps du texte

php - Comment utiliser la commande par champ dans le framework Yii

Comment fusionner order by field dans

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 "`" ?

黄舟黄舟2698 Il y a quelques jours1184

répondre à tous(1)je répondrai

  • 三叔

    三叔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')")])

    répondre
    0
  • Annulerrépondre