交叉比较刀片中的两个列表

时间:2016-11-20 22:26:55

标签: laravel laravel-5

在我的控制器中,我获得了一个角色列表及其相关权限。此外,我获得了所有权限的列表。

$roles = Role::with('perms')->get();
$permissions = Permission::all();

所以现在当我将其传递给我的视图时,我现在拥有一个具有权限的角色列表,以及所有可能权限的列表。

在我看来,我目前正在做这样的事情

@foreach($roles as $role)
    <tr>
        <td>
            {{ $role->display_name or '' }}
        </td>
        <td>
            <ul class="list-group">
                @foreach($role->perms as $permission)
                    <li class="list-group-item">
                         {{ $permission->display_name }}
                    </li>
                @endforeach
            </ul>
        </td>
    </tr>
@endforeach

所以我基本上用他们的权限显示所有角色。现在,在每个循环中,我试图添加类似下面的内容

<li class="list-group-item">
    <select name="add-permission-select" class="form-control"></select>
</li>

上面的选择应显示角色可以拥有的所有剩余权限。所以我基本上需要查看角色拥有的所有权限,然后在我的$ permissions列表中交叉检查。所以我要说我有

PermissionA
PermissionB
PermissionC

第一个角色只有PermissionA,此角色的选择选项应显示PermissionB和PermissionC。

我将如何交叉比较这两件事?

由于

1 个答案:

答案 0 :(得分:1)

您最好的选择可能是使用收集过滤器。

使用Available Collection Methods,您可以在每个角色/权限对象上运行diff(),过滤掉您不需要的内容。请参阅DiffDiffKeys方法。

示例:

$collection = collect([1, 2, 3, 4, 5]);

$diff = $collection->diff([2, 4, 6, 8]);

$diff->all();

// [1, 3, 5]