Сложный порядок MySQL по эквиваленту Query в активной записи Yii2 - PullRequest
0 голосов
/ 04 марта 2019

Мне нужно упорядочить данные таблицы по полю status, но я также хочу сначала показать несколько строк, которые имеют определенный status.

В настоящее время я могу добиться этого с помощью MySQL, например:

SELECT status FROM item
ORDER BY status NOT LIKE '%order-status%',  status

Таким образом, все элементы имеют статус заказа order-status, вначале будет отображаться статус, а затем другие заказы по статусу.

Но я не могу добиться этого в активной записи Yii2.Я пытался написать что-то вроде:

$query->orderBy(['not like', 'item.status', 'order-status']);
$query->orderBy(['item.status' => SORT_ASC]);

Но это не правильно.Есть ли способ добиться этого в Active Record?

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Вы можете использовать строку в orderBy, например:

$query->orderBy("status NOT LIKE '%order-status%',  status");

или

$query->orderBy("status NOT LIKE '%order-status%'")
     ->addOrderBy('status');

Полезная ссылка: db-query-builder

0 голосов
/ 04 марта 2019

Вы можете использовать yii\db\Expression для создания пользовательского предложения order by.Запрос по вашему требованию будет выглядеть следующим образом:

$query->orderBy(new yii\db\Expression("status NOT LIKE '%order-status%',  status"))

Этот параметр, переданный в Expression экземпляре, будет напрямую использоваться построителем запросов Yii 2.Для более подробной информации вы можете прочитать документацию Expression .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...