#php #sorting #yii2 #dataprovider
#php #сортировка #yii2 #поставщик данных
Вопрос:
Я работаю над фреймворком yii2, и у меня есть API, из которого я получаю «группы» из таблицы, и у него есть связь с другой таблицей, называемой «разрешения», и эта таблица «разрешения» имеет внешний ключ для таблицы «группа» «group_id», поэтому для этого API: http://localhost/yii2/backend/web/index.php?r=configuration/permissiongroupamp;expand=permissionsamp;sort=name ответ: [
{ "id": 8, "name": "group_a", "permissions": [ { "id": "34", "name": "z", "group_id": 8 }, { "id": "35", "name": "x", "group_id": 8 }, { "id": "36", "name": "y", "group_id": 8 } ] }, { "id": 3, "name": "group_b", "permissions": [ { "id": "22", "name": "b", "group_id": 3 }, { "id": "23", "name": "d", "group_id": 3 }, { "id": "24", "name": "a", "group_id": 3 } ] },
В этом API мне удалось отсортировать объект «группы» в порядке возрастания, добавив параметр «сортировать» в URL-адрес, но мне нужно отсортировать объект «разрешения» в порядке возрастания, так как я могу этого добиться в рамках yii2?
Комментарии:
1. Если вы используете
dataprovider
, то приведенный ниже ответ будет работать, иначе также отобразится запрос
Ответ №1:
Мне удалось добиться этого с помощью активного запроса в модели «permissionGroup», где у меня уже была функция под названием «getPermissions», поэтому я просто разместил заказ, и это сработало.
public function getPermissions() { return $this-gt;hasMany(Permission::className(), ['group_id' =gt; 'id'])-gt;orderBy('name ASC'); } public function extraFields() { return ['permissions']; }
Ответ №2:
Вы можете использовать псевдоатрибут для сортировки и задать для него соответствующие параметры сортировки.
URL-адрес может быть: http://localhost/yii2/backend/web/index.php?r=configuration/permissiongroupamp;expand=permissionsamp;sort=name2
Настройте сортировку таким образом:
$dataProvider-gt;sort-gt;attributes['name2'] = [ 'asc' =gt; [ 'groups.name' =gt; SORT_ASC, 'permissions.name' =gt; SORT_ASC, ], 'desc' =gt; [ 'groups.name' =gt; SORT_DESC, 'permissions.name' =gt; SORT_DESC, ], ];
Комментарии:
1. спасибо за ответ, но у меня это не работает, я не знаю почему, но мне удалось добиться этого с помощью активного запроса в модели.