Доброго времени суток! Задача следующая: имеется одна таблица files, в которой содержатся данные о различных файлах и один из параметров - type [archive/image/thumbnail] и их требуется вывести в Api в таком формате:
Однако, при моём способе реализации, выходит 3 запроса к одной базе данных с тремя разными выборками. Вопрос: возможно ли объединить их в один и имеет ли такая "оптимизация" вообще место быть?
Моя реализация следующая:
ModResource
public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->title,
'slug' => $this->slug,
'author' => new AuthorResource($this->mod_author),
'sticky' => $this->sticky,
'categories' => CategoryResource::collection($this->categories),
'files' => [
'archives' => FileResource::collection($this->mod_archives),
'images' => FileResource::collection($this->mod_images),
'thumbnail' => FileResource::collection($this->mod_thumbnail)
]
];
}
Mod (model)
public function files() {
return $this->hasMany(File::class);
}
public function mod_archives() {
return $this->files()->where('type', 'archive');
}
public function mod_images() {
return $this->files()->where('type', 'image');
}
public function mod_thumbnail() {
return $this->files()->where('type', 'thumbnail');
}
ModController
public function index()
{
$mods = Mod::with('categories')
->with('mod_author')
->with('mod_archives')
->with('mod_thumbnail')
->with('mod_images')
->paginate('10');
return ModResource::collection($mods);
}