Обработка сложных запросов в laravel 5 - PullRequest
0 голосов
/ 08 мая 2018

У меня простая задача со сложным запросом, 50% выполнено, остальная часть мне нужна помощь.

Logic

  1. У меня есть целевые страницы, где я выбираю категорию, затем выбираю спецификации в этой категории и продукты, связанные с этим двумя фильтр покажет на целевой странице. this is done
  2. Мне также нужна целевая страница, когда я выбираю категорию без выбрать любую спецификацию и показать все продукты, связанные с этим категория независимо от того, какие характеристики у них есть. need help for this

Коды

это мой контроллер i commented each part for better understanding

public function landings($slug){
    $landing = Landing::where('slug', $slug)->Status('Active')->firstOrFail(); //find landing page

    //getting landing pages category id (in case one landing page have several category involved)
    $cat = DB::table('landing_categories')->where('landing_id', $landing->id)->get();
    foreach ($cat as $key) {
      $id[] = $key->category_id;
    }

    // i just add this to filter landing without specifications for if statement below **not sure about this yet**)
    $spac = DB::table('landing_specifications')->where('landing_id', $landing->id)->get();

    // this is where things happen (first $prod is responsible for landing with specifications and working fine, **else part** need fix to show landings without specifications.
    if($spac != null){
      //old
      $prod = DB::table('landing_specifications')->where('landing_id', $landing->id)
      ->join('product_subspecification', function ($keys) {
          $keys->on('product_subspecification.subspecification_id', '=', 'landing_specifications.subspecification_id');
      })
      ->join('products', 'products.id', '=', 'product_subspecification.product_id')
      ->whereIn('products.category_id', $id)
      ->groupby('products.id')
      ->paginate(12);
    }else{
      //new
      $prod = DB::table('landing_categories')->where('landing_id', $landing->id)
      ->join('products', 'products.category_id', '=', 'landing_categories.category_id')
      ->whereIn('products.category_id', $id)
      ->groupby('products.id')
      ->paginate(12);
    }


    return view('front.landing', compact('landing', 'prod'));
  }

Надеюсь, мои комментарии в приведенном выше коде помогут вам избежать недоразумений.

PS: я знаю, что у меня есть 2 главных проблемы

  1. Мое утверждение if неверно
  2. Моя другая часть нуждается в исправлении (но перед исправлением if () я не могу увидеть результаты другой части)

есть идеи?

1 Ответ

0 голосов
/ 08 мая 2018

решаемые

Я изменил свою часть if на код ниже, и теперь он работает отлично

$spac = DB::table('landing_specifications')->where('landing_id', $landing->id)->first();

if($spac){
// rest of it...

надеюсь, это поможет.

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