Когда collection-> map возвращает массив, данные в Collection вызывают ошибку - PullRequest
0 голосов
/ 21 января 2020

В 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.

Я имею в виду, я уже использовал этот сборник в другой части приложения, могу ли я использовать его без создания нового ...

1 Ответ

1 голос
/ 21 января 2020

Я думаю, что вы получаете эту ошибку, потому что вам CollectionResource нужен объект модели Permission, но в вашем случае он пытается получить идентификатор из массива после функции map. Попробуйте расширить вашу модель вместо того, чтобы возвращать новый массив

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...