Я пытаюсь использовать оператор CASE порядка оператора MySQL в приложении Cake PHP 3.x. Простой выбор выглядит следующим образом:
$articles = $this->Articles->find()
->where($conditions)
->order(function ($exp, $q) {
return $exp->addCase(
[
$q->newExpr()->gt('Articles.modified', (new Time())->subDays(365)) // article has been updated in the last x days
],
['priority'], # values matching conditions
['string'] # type of each value
);
})
->limit(15)
->all();
Создается следующее SQL:
SELECT `Articles`.`id` AS `Articles__id`, ....
FROM `articles` `Articles`
WHERE (`publish` < :c0 AND `Articles`.`publish` > :c1)
ORDER BY CASE WHEN `Articles`.`modified` > :c2 THEN :param3 END LIMIT 15
Оператор case неверен, потому что в нем отсутствует порядок DES C, который должен стоять после 'END' - см. эту скрипку:
http://sqlfiddle.com/#! 9 / 8df161 / 5
Я не уверен, что это ограничение с как Cake PHP обрабатывает CASE?
Далее мне нужен второй порядок после оператора case, чтобы упорядочить по 'publi sh' des c.