Тема: Сортировка "своих" полей aka Custom column sort
Введение:
Всё ниже написанное сгенерено через doctrine:generate-admin
В модуле при отображении списка, нужно выводить колонки, которые берутся из другой таблицы (связанная по связи hasMany, hasOne and etc...).
Это можно делать двумя способами (которые я пока понял). Это правка темплэйта, и вместо вывода id выводить данные из объекта к примеру есть у нас сл. связь:
Auto:
columns:
mark:
type: string(255)
notnull: true
model:
type: string(255)
notnull: true
Part:
columns:
Auto_id:
type: integer
notnull: true
name:
type: string(255)
notnull: true
others-columns...
relations:
Auto:
onDelete: CASCADE
local: Auto_id
foreign: idи нам нужно выводить два поля `auto.mark` и `auto.model`
тогда мы определяем шаблон _list_td_tabular.php (легче всего его скопировать из кэша), так же еще нужно будет предопределять _list_th_tabular. И в столбце где стоит $part->getAutoId();. Заменяем на $part->getAuto()-getAutoMark();. И по аналогии добавляем новый столбец для getAutoModel(). Также необходимо будет править табулар для шапки, иначе таблица разъедиться.
Теперь мне необходимо сделать сортировку по этим колонкам. И тут я уже не знаю что делать... Немного погуглив наткнулся на способ задания этих полей через generator.yml
Способ #2 - table_method: queryList
Задаем table_method: queryList в generator.yml для нужного модуля. Потом идем в папку с моделями DOC_ROOT_SF/lib/doctrine/ и открываем {имя_модуля}Table.class.php там создаем метод quertList
public function queryList($query)
{
$query
->select('
r.name AS name,
a.mark AS mark,
a.model_issue AS model,
(r.price_sale - r.price_provider) AS price_diff,
r.id
')
->leftJoin('r.Auto a');
return $query;
}Потом в generator.yml прописываем какие поля нам нужно отображать:
list:
table_method: queryList
display: [ =name, mark, model, price_sale, is_availability ]Так мы получили нужные нам поля для списка.
теперь есть такой параметр как sort, я так понял что он определяет по каким полям доступна сортировка. Добавим этот параметр с нужными полями и в итоге часть generator.yml для list будет выглядить сл. образом
list:
table_method: queryList
display: [ =name, mark, year_issue, price_sale, price_diff, is_availability ]
sort: [name, mark, year_issue, price_sale, price_diff, is_availability ]В итоге сортировка добавилась для "родных полей", а поля которые берутся по связи сортировать нельзя...
И дальше я зашел в тупик.
Где можно предопределить сортировку или добавить метод (по аналогии с фильтром) сортировки этих полей