При использовании whenLoaded в коллекции ресурсов я получил ошибку - PullRequest
0 голосов
/ 11 марта 2020

В приложении laravel 6 у меня есть коллекция ресурсов, которая работает нормально для меня:

class UserSkillCollection extends ResourceCollection
{
    public static $wrap = 'user_skills';

    public function toArray($request)
    {

        return $this->collection->transform(function($userSkill){
            return [
                'id' => $userSkill->id,
                'user_id' => $userSkill->user_id,
                'user_name' => $userSkill->user_name,
                'skill_id' => $userSkill->skill_id,
                'skill_name' => $userSkill->skill_name,
                'rating' => $userSkill->rating,
                'created_at' => $userSkill->created_at,
            ];
        });

    }

, за исключением случаев, когда определены некоторые поля, например, user_name, у меня есть ключи с нулевыми значениями.

Чтобы избавиться от них, я пытался использовать whenLoaded, но со строкой:

'user_id' => $this->whenLoaded('user_id'),

Я получил ошибку:

"message": "Method Illuminate\\Support\\Collection::relationLoaded does not exist.",

Какой способ действителен?

ИЗМЕНЕНО: Я добавил отношения в моделях и сделал:

  'user' => $userSkill->whenLoaded('user'),

или

  'user' => $this->whenLoaded('user'),

Я получил ошибку:

Call to undefined method App\UserSkill::whenLoaded(

I Предположим, эта ошибка, как я ее называю из коллекции. Как правильно?

Спасибо!

1 Ответ

1 голос
/ 11 марта 2020

relationLoaded() - это метод, унаследованный от черты HasRelationships в Illuminate\Database\Eloquent\Model.

Ваш код пытается получить к нему доступ в экземпляре Illuminate\Support\Collection.

Попробуйте доступ к связи user, а не к ее ключу user_id. Вот так:

$this->whenLoaded('user')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...