Сортировка yii2 разверните данные в порядке возрастания

#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. спасибо за ответ, но у меня это не работает, я не знаю почему, но мне удалось добиться этого с помощью активного запроса в модели.