Оптимизация построителя запросов для нескольких запросов таблиц в laravel - PullRequest
0 голосов
/ 11 октября 2018

Я использую 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...