【问题标题】:Cannot access data from nested Laravel collection无法访问嵌套 Laravel 集合中的数据
【发布时间】:2019-09-14 19:16:41
【问题描述】:

我想从$space_roles 变量中访问具有以下结构["role"=>"user_id"] 的嵌套集合属性,其中包含:

 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 作为用户属性。

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

我坚持这一点。

【问题讨论】:

  • 每个角色会有多个用户吗?如果是这样,您是否希望结构为['role' => ['user_ids']]
  • 是的,一个用户可以有多个角色

标签: laravel laravel-5 eloquent


【解决方案1】:

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

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

pluck() 用于返回用户的所有ids。

【讨论】:

  • 您的解决方案似乎有效(我正在创建许多用户来进行测试),但我只是在上面的问题中没有提到一个小问题,而不是只返回 ['roles'=>[users]] .如果我有一个 UserResource,我该如何返回它,而不是 user_id
  • @ChristianLisangola 最好单独提问。但是,一旦完成,请告诉我。
  • 你能帮我解决这个问题吗:stackoverflow.com/questions/56063136/… 情况?
猜你喜欢
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
  • 2013-12-30
相关资源
最近更新 更多