Рейтинг:6

Какой метод следует использовать вместо Drupal\Core\Entity\Query\Sql\Query::addExpression()?

флаг my

Я использую Entity Query для выбора узлов двух разных типов. Кажется, что выборка работает, но я сортирую возвращаемые значения. Оба типа контента имеют разные поля даты. Я знаю, что могу сделать это с $query->addExpression('COALESCE(field_date_1, field_date_2)', 'Дата'); $query->sort('Дата', 'DESC'); но добавитьВыражение() не является существующим методом, и код выдает это исключение.

Ошибка: вызов неопределенного метода Drupal\Core\Entity\Query\Sql\Query::addExpression()

Как я могу сортировать по более чем 2 полям даты?

Рейтинг:6
флаг cn

Запросы сущностей не поддерживают выражения. Чтобы обойти это, добавьте в запрос тег:

$query->addTag('моймодуль');

Затем реализуйте hook_query_alter(), проверьте наличие тега и добавьте вместо него выражение:

function mymodule_query_alter(Drupal\Core\Database\Query\AlterableInterface $query) {
  if ($query instanceof Drupal\Core\Database\Query\SelectInterface && $query->hasTag('mymodule')) {
    $запрос->добавитьВыражение('...');
  }
}
Akansha avatar
флаг my
Спасибо, это сработало, и hook_query_TAG_alter() здесь тоже работает. Добавление для будущих ссылок.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.