Не удается получить доступ к данным из вложенной коллекции Laravel - PullRequest
0 голосов
/ 25 апреля 2019

Я хотел бы получить доступ к атрибутам вложенной коллекции со следующей структурой ["role"=>"user_id"] из $space_roles переменной, которая содержит:

 Illuminate\Database\Eloquent\Collection {#3168
     all: [
       App\UserGroup {#3153
         role: "CONTRIBUTORS",
         updated_at: "2019-04-25 09:03:24",
         name: "Contributeurs",
         created_at: "2019-04-25 09:03:24",
         slug: "contributeurs-2",
         id: 765,
         users: Illuminate\Database\Eloquent\Collection {#3152
           all: [],
         },
       },
       App\UserGroup {#3156
         role: "AUTHORS",
         updated_at: "2019-04-25 09:03:24",
         name: "Auteurs",
         created_at: "2019-04-25 09:03:24",
         slug: "auteurs-2",
         id: 1554,
         users: Illuminate\Database\Eloquent\Collection {#3169
           all: [
             App\User {#3180
               updated_at: "2019-04-25 09:01:42",
               created_at: "2019-04-25 09:01:42",
               last_name: "Lisangola",
               company: "Kinshasa Digital",
               first_name: "Christian",
               slug: "christian-lisangola",
               email: "christian@kinshasadigital.com",
               id: 1296,
             },
           ],
         },
       },
       App\UserGroup {#3159
         role: "ANIMATORS",
         updated_at: "2019-04-25 09:03:24",
         name: "Animateurs",
         created_at: "2019-04-25 09:03:24",
         slug: "animateurs-2",
         id: 1534,
         users: Illuminate\Database\Eloquent\Collection {#3171
           all: [],
         },
       },
       App\UserGroup {#3162
         role: "ADMINISTRATORS",
         updated_at: "2019-04-25 09:03:24",
         name: "Administrateurs",
         created_at: "2019-04-25 09:03:24",
         slug: "administrateurs-1",
         id: 1323,
         users: Illuminate\Database\Eloquent\Collection {#3172
           all: [
             App\User {#3185
               updated_at: "2019-04-25 09:03:05",
               created_at: "2019-04-25 09:03:05",
               last_name: "Calvin",
               company: "Gravity",
               first_name: "Jean",
               slug: "jean-calvin",
               email: "jean@gmail.com",
               id: 1533,
             },
           ],
         },
       },
     ],
   }

Чтобы попытаться получить то, что я хочу, я использовал метод коллекций laravel pluck, выполнив $space_roles->pluck('users.id','role'), и он возвращает null для атрибутов пользователя.

Но я не могу получить ожидаемый результат. Я пытался сделать так, как описано здесь: Доступ к данным из коллекции с помощью цепочки, подобной этой $space_roles->pluck('users')->flatten()->pluck('id'), она работает, но я получаю доступ только к users и не role.

Я застрял на этом.

1 Ответ

3 голосов
/ 25 апреля 2019

Вы можете использовать метод сбора map(), чтобы вернуть данные так, как вам хотелось бы:

$space_roles = $space_roles->map(function($role, $key) { 
    return [$role->role => $role->users->pluck('id')->all()];
})->values()->all();

pluck() используется для возврата всех id с пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...