【发布时间】:2020-05-07 18:09:03
【问题描述】:
在 laravel 6 应用程序中,我将集合定义为:
class PermissionCollection extends ResourceCollection
{
public static $wrap = 'permissions';
public function toArray($request)
{
return $this->collection->transform(function($permission){
return [
'id' => $permission->id,
'name' => $permission->name,
'is_checked' => !empty($permission->is_checked) ? $permission->is_checked : null,
'guard_name' => $permission->guard_name,
'created_at' => $permission->created_at,
];
});
}
}
我在控件中使用它,例如:
$permissions = $user->permissions->all();
$userPermissionLabels= Permission
::get()
->map(function ($item) use($permissions) {
$is_checked= false;
foreach( $permissions as $nextPermission ) {
if($nextPermission->permission_id === $item->id) {
$is_checked= true;
break;
}
}
return [ 'id'=> $item->id, 'name'=> $item->name, 'is_checked' => $is_checked];
})
->all();
return (new PermissionCollection($userPermissionLabels));
我得到了错误:
Trying to get property 'id' of non-object
看起来原因是 collection->map 返回数据数组,而不是对象。 如果有办法在不创建新集合(使用数组)的情况下修复它?
MODIFIED :
我登录了我的收藏,
public function toArray($request)
{
return $this->collection->transform(function($permission){
\Log::info(' PermissionCollection $permission');
\Log::info($permission);
return [
'id' => $permission->id,
'name' => $permission->name,
'is_checked' => !empty($permission->is_checked) ? $permission->is_checked : null,
'guard_name' => $permission->guard_name,
'created_at' => $permission->created_at,
];
});
}
我在日志中看到:
PermissionCollection $permission
array (
'id' => 1,
'name' => 'App admin',
'is_checked' => false,
)
local.ERROR: Trying to get property 'id' of non-object
The value is valid array, not null.
我的意思是我已经在应用程序的其他部分使用了这个集合,我可以在不创建新集合的情况下使用它吗...
【问题讨论】:
-
这与map函数返回什么无关。您的权限集合是否可能包含
null值? -
请看修改:
标签: laravel collections resources