Ларавел 5.7. У меня есть модель Audio
, с полями id
и title
. Audio
может иметь много AudioVersion
с, где AudioVersion
имеет id
, audio_id
(имеется в виду Audio
) и url
.
Теперь у меня есть две родительские модели, Foo
и Bar
, которые могут иметь много моделей Audio
.
Аудио:
class Audio extends Model
{
public function versions()
{
return $this->hasMany('App\AudioVersion', 'audio_id');
}
}
аудиоверсия:
class AudioVersion extends Model
{
public function audio()
{
return $this->belongsTo('App\AudioContent');
}
}
Foo:
class Foo extends Model
{
public function audioContents()
{
return $this->morphToMany('App\Audio', 'audio_contentable', 'audio_contentable');
}
}
У меня есть ресурс Eloquent API, FooResource
, который возвращает Audio
объектов:
FooResource:
class FooResource extends JsonResource
{
public function toArray($request)
{
return [
'audio' => AudioResource::collection($this->audioContents),
];
}
}
AudioResource:
class AudioResource extends JsonResource
{
public function toArray($request)
{
return [
'urls' => $this->versions,
];
}
}
Моя проблема в том, что в ключе audio
моего FooResource
я хочу вернуть только Audio
s, которые имеют AudioVersions
, связанные с ними. То есть если у меня есть Audio
без AudioVersions
, я не хочу, чтобы Audio
был включен в ключ Foo
audio
. Я не могу найти способ сделать эту глубокую условную логику в Eloquent / Resources.