Drupal 8: Отсортировать int представленных в string

И очередная проблема с Drupal: Предположим, у вас есть таблица, в которой одно из полей — это год выпуска товара, но он представлен в string. Вам нужно отсортировать товары по этому году.

Стандартное решение:

$query = \Drupal::database()->select(‘items’, ‘item’);
$query->fields(‘item’, [‘id’, ‘title’, ‘year’]);
$query->orderBy(‘year’, ‘ASC’);
$sets = $query->execute()->fetchAll();

Только проблема в что, у нас будет alphanumeric sorting товаров, а нужен natural order sotring и Drupal с этим справиться уже не сможет.

SQL предлагает простое решение:

order by year*1 ASC

или

order by cast(year as unsigned)

Но этот способ не будет работать, т.к. создатели движка решили защититься от «дураков»-программистов.

Решение:

core\lib\Drupal\Core\Database\Query\Select.php

И заменить

$fields[] = $this->connection->escapeField($field) . ‘ ‘ . $direction;

на

$fields[] = $field . ‘ ‘ . $direction;

  1. Пока что нет комментариев.
  1. Пока что нет уведомлений.