【问题标题】:When collection->map returnes array then data in Collection raise error当 collection->map 返回数组时,Collection 中的数据会引发错误
【发布时间】: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


【解决方案1】:

我认为您收到此错误是因为您 CollectionResource 需要 Permission 模型的对象,但在您的情况下,它试图在 map 函数之后从数组中获取 id。尝试扩展你的模型而不是返回一个新数组

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2013-06-27
    • 2012-02-29
    • 2020-06-21
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多