Как мне выполнить $query->OrderBy('ПОЛЕ(node.nid, 5,12,3,6)', 'ASC')? Как выполнить $query->OrderBy('ПОЛЕ(node.nid, 5,12,3,6)', 'ASC')?


В настоящее время я конвертирую код с Drupal 7 на Drupal 8. До сих пор я не могу найти ресурсы о том, как преобразовать вызов в orderBy(), в котором используется выражение.

$query->orderBy("FIELD(node.nid, '5,12,3,6')", 'ASC'); 

На основе D8 Select::OrderBy, он принимает только псевдоним или поля.

Какой код я должен использовать в Drupal 8?

 2
Author: Spencer Chang, 2016-05-02

1 answers

Я нашел обходной путь, реализовав инструкцию CASE, а затем отсортировав ее по значению.

$query->addExpression("
    CASE node.nid
        WHEN 5 THEN 1
        WHEN 12 THEN 2
        WHEN 3 THEN 3
        WHEN 6 THEN 4
        ELSE 5
    END
", 'order_field');

$query->orderBy("order_field", 'ASC');

Надеюсь, в будущем они добавят еще одну функцию для обработки этих специальных инструкций.

 4
Author: Spencer Chang, 2016-05-03 11:15:54