Я использую Laravel.У меня есть 4 таблицы альбомов, категорий, галерей, фотографий.
Это возможный URL domain.com/gallery/21.Поэтому, если этот URL-адрес введен, мне нужно для всех родителей, связанных с хлебной крошкой, на данный момент я делаю это таким образом.
public function completePath(Request $request)
{
$view = $request->input("view");
$id = $request ->input("id");
$complete = false;
$path = [];
if($view == 'gallery'){
$gallery = \DB::table('galleries')
->where('galleries.id', $id)
->select('id', 'category_id as parent_id', 'name')
->first();
$complete = true;
$gallery->lvl = 'gallery';
$id = $gallery->parent_id;
$path[] = collect($gallery)->except('parent_id');
}
if($view == 'category' || $complete == true){
$category = \DB::table('categories')
->where('categories.id', $id)
->select('id', 'album_id as parent_id', 'name')
->first();
$complete = true;
$category->lvl = 'category';
$id = $category->parent_id;
$path[] = collect($category)->except('parent_id');
}
if($view == 'album' || $complete == true){
$album = \DB::table('albums')
->where('albums.id', $id)
->select('id', 'name')
->first();
$album->lvl = 'album';
$path[] = $album;
}
$path_reverse = array_reverse($path);
return response()->json($path_reverse, 200);
}
Это результат, который я получаю, и он работает
[
{"id":"1","name":"myAlbum","lvl":"album"},
{"id":"4","name":"sport","lvl":"category"},
{"id":"21","name":"sport-3","lvl":"gallery"}
]
Но есть ли способ упростить это?Так что если view - галерея, у меня есть только один запрос к БД вместо 3?
gregor