无法访问嵌套Laravel集合中的数据

时间:2019-04-25 11:07:26

标签: laravel laravel-5 eloquent

我想从["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,
             },
           ],
         },
       },
     ],
   }

要尝试获得我想要的东西,我通过执行pluck使用了laravel集合方法$space_roles->pluck('users.id','role'),它为用户的属性返回了null

但是我无法获得预期的结果。我尝试按照此处的说明进行操作:Accessing data from a Collection通过像这样$space_roles->pluck('users')->flatten()->pluck('id')进行链接,它可以工作,但我只能访问users,而不能访问role

我对此感到困惑。

1 个答案:

答案 0 :(得分:3)

您可以使用map()收集方法以所需的方式返回数据:

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

pluck()用于从用户返回所有id