【问题标题】:How to get only nested data in Laravel collection如何仅获取 Laravel 集合中的嵌套数据
【发布时间】:2021-11-05 22:55:40
【问题描述】:

我写了一个这样的数据库选择(Laravel 8):

$users = collect(User::with(['roles','roles.permissions'])->find(21));

结果如下

=> Illuminate\Support\Collection {#2051
     all: [
       "id" => 21,
       "first_name" => "test",
       "name" => "test",
       "..." => "...",
       "roles" => [
         [
           "id" => 9,
           "name" => "Test",
           "permissions" => [
             [
               "id" => 13,
               "name" => "userReadList",
             ],
             [
               "id" => 11,
               "name" => "userUpdate",
             ],
           ],
         ],
         [
           "id" => 4,
           "name" => "responsible",
           "permissions" => [
             [
               "id" => 10,
               "name" => "userRead",
             ],
             [
               "id" => 9,
               "name" => "userCreate",
             ],
           ],
         ],
       ],
     ],
   }

现在:我必须在查询中进行更改以仅获取一个数组,其中包含以下权限 ID:[13,11,10,9]?

或者是我的查询主体在获取权限 ID 时出错

【问题讨论】:

    标签: collections laravel-8


    【解决方案1】:

    我找到了解决办法:

    $userPermissions = collect(User::with(['roles','roles.permissions'])->find(21));
    
    Arr::flatten(Arr::pluck($userPermissions['roles'] , 'permissions.*.id'));
    
    //[13,11,1,4,]
    

    但我认为,更好的方法是以下

    $userPermissions = User::with(['roles','roles.permissions'])->find(21);
    
    $userPermissions->roles->pluck('permissions.*.id')->flatten()->toArray();
    
    //[13,11,1,4,]
    

    也可能是下面的方法

    $userPermissions = User::with(['roles','roles.permissions'])->where('id',21)->get();
    
    $userPermissions->pluck('roles.*.permissions.*.id')->flatten()->toArray();
    
    //[13,11,1,4,]
    

    【讨论】:

      猜你喜欢
      • 2018-10-10
      • 1970-01-01
      • 1970-01-01
      • 2020-04-29
      • 2021-10-28
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      相关资源
      最近更新 更多