使用eloquent,我正在查询两组数据:
$all_perms = Permission::all(); //all permissions
$role_perms = Auth::user()->roles()->permissions; //permissions belonging to a role
$role_perms
是$all_perms
的一个子集,我想要的是循环两个数组并推出一个新数组,其中包含已分配给角色的所有权限以及尚未分配给角色的权限
我所做的是在foreach循环中循环遍历两个数组,如果任何一个数组属于两个集合,我通过向数组添加一个check
键和相应值1来标记它,以便我可以识别作为已分配给角色的权限。
foreach ($role_perms as $role_perm) {
foreach ($all_perms as $key => $value ) {
if (array_diff_assoc($all_perm, $role_perm)) {
$all_perm['check'] = 1;
}
}
}
但它一直在抛出错误:
array_diff_assoc():参数#1不是数组
他们是更好的方法吗?或者我可以在这个上做些什么来使它工作?
感谢您的帮助
答案 0 :(得分:2)
那是因为它是一个集合,而不是一个数组。如果您想获得数组,请尝试使用toArray()
:
$all_perms = Permission::all()->toArray();
此外,这是一个错字:
array_diff_assoc($all_perm, $role_perm);
应为$all_perms
答案 1 :(得分:0)
尝试使用所有馆藏中提供的精彩包含方法:
foreach ($role_perms as $role_perm) {
if($all_perms->contains($role_perm))
{
// do whatever is needed
}
}
使用contains方法查看docs以获取帮助。