Я использую ресурсы Laravel для получения данных для API:
return [
'id' => $this->id,
'unread' => $this->unread,
'contact' => UserResource::collection($this->users),
];
И это работает нормально. Проблема в том, что «пользователи» пустые. Я имею в виду - не каждый раз, когда мой контроллер загружает пользователей из моих отношений:
$offers = Offer::where('user_id', $user_id)->orderBy('created_at','desc')->get();
foreach ($offers as $offer)
{
$offer->setRelation('users', $offer->users->unique());
}
return OfferShortResource::collection($offers);
иногда - это отношение не существует. Но не отношение является проблемой, потому что - мой ресурс не загружает отношение - relatin загружается внутри контроллера.
Так как я могу добавить какую-то логику к ресурсам? - скажем, в основном - свойство пользователей может не существовать - тогда не загружать данные здесь или даже - не проверять $this->users
отношение
edit: я пытался сделать так:
use Illuminate\Support\Arr;
...
'contact' => $this->when(Arr::exists($this, 'users'), function () {
return UserResource::collection($this->users);
}),
но это всегда дает ложь
изменить 2: отношение в модели предложения
public function users(){
return $this->belongsToMany(User::class, 'messages', 'offer_id', 'from')
->where('users.id', '!=', auth()->user()->id);