Intereting Posts
Как передать массив в вызов PHP SoapClient Действие формы не передает жестко заданную переменную Когда вам понадобится использовать позднюю статическую привязку? Использование переменных PHP SESSION для хранения результатов запросов MySQL PHP max_execution_time игнорируется (нет безопасного режима, нет общего хоста, только localhost / windows7 / php 5.3.1 и время ожидания Apache равно 300) Лучший вариант для вызова функциональности модели в контроллере PHP Именованная функция с несколькими аргументами в PHP Проблема с португальской кодировкой MySQL кодировки и сортировки: нечувствительность к акценту не работает Как посмотреть файл в PHP? Монолог, как записывать PHP-массив в консоль? Ошибка при использовании подготовленных операторов PDO и LIMIT в запросе как изменить ключ в массиве при сохранении порядка? Как я могу изменить meta (alt и название) в миниатюре каталога, миниатюре продукта? – Woocomerce Проблема с: Неустранимая ошибка: оператор не поддерживается для строк в

Могу ли я установить порядок по умолчанию в классе Table на cakephp3

В CakePHP 2.x в моделях было свойство $order . Поэтому я использовал это свойство для заказа моих данных по всему миру. Так, например, предполагая, что мне нужно отобразить поле выбора со странами в представлении в моей модели Country используемой для добавления строки:

 $order = 'Country.country DESC'; 

а затем, когда я привел страны из любого контроллера данные, заказанные по названию страны, а не по id или другому полю. Это было очень полезно для ящиков выбора. На CakePHP 3.x я не могу найти какую-либо аналогичную ссылку в документации.

Есть ли что-нибудь, что я могу сделать, чтобы мои данные сортировались по всему миру, когда я их получаю, а не использовать параметр заказа в каждой находке?

Solutions Collecting From Web of "Могу ли я установить порядок по умолчанию в классе Table на cakephp3"

Просто добавьте свою любимую собственность и используйте обратный вызов beforeFind () в объекте Table, чтобы добавить значение из свойства в запрос.

Или просто создайте пользовательский поиск :

 public function findOrdered(Query $query, $options) { return $query->order([ $this->alias() . '.name' => 'ASC' ]); } 

И использовать его

 $this->find('list')->find('ordered')->all(); 

Или создайте упорядоченный список, который возвращает весь упорядоченный список.

 public function findOrderedList(Query $query, $options) { return $this->findList($query, $options) ->order([ $this->alias() . '.name' => 'ASC' ]); } 

Или перегрузите метод findList () напрямую и вызовите родителя.

Или, если ваша find() вызывается через отношения, вы можете установить порядок по умолчанию для отношений , используя опцию sort .

 $this->hasMany('AuditLogs', [ 'sort' => [ 'AuditLogs.timestamp' => 'desc', ], ]); 

Вы можете переопределить метод findAll в своем классе таблицы.

 public function findAll(Query $query, array $options) { return $query->order(['Country.country' => 'DESC']); } 

CakePHP3.x:

Если вы хотите отсортировать данные в своей модели для каждого запроса, связанного с этой моделью, вы можете просто запросить запрос в файле модели через beforeFind:

 public function beforeFind(Event $event, Query $query, $options, $primary) { $query->order(['Model.field' => 'ASC']); return $query; } 

В CakePHP 3.x, если вы хотите так настроить порядок по умолчанию для каждого запроса модели, вы можете поместить следующий код в свою таблицу:

 public function beforeFind ($event, $query, $options, $primary) { $order = $query->clause('order'); if ($order === null || !count($order)) { $query->order( [$this->alias() . '.sort_field_name' => 'sort_order'] ); } } 

Если какой-либо order установлен снаружи, он пропускает порядок по умолчанию. В противном случае он будет сортироваться по sort_field_name соответствии с sort_field_name .

Согласно официальным документам, см. Книгу cakephp , вы можете добавить публичную переменную к объекту контроллера, чтобы установить порядок сортировки по умолчанию:

 class InvoicesController extends AppController { public $paginate = [ 'order' => [ 'Invoices.id' => 'desc' ] ]; ....