前提・実現したいこと
商品一覧画面に、検索機能を追加しているのですが、laravelに精通していないため、詰まってしまいました。
indexメソッドでは商品一覧画面で使う商品一覧($productInfo)と、検索機能で使うセレクトボックスのoptionを入れている$categoriesと$prefecturesを返しています。
controller
1 public function index() 2 { 3 $productInfo = Product::where('products.delete_flg', '0') 4 ->select('products.name as product_name', 5 'companies.name as company_name', 6 'prefectures.name as prefecture_name', 7 'products.id as product_id', 8 'orders.user_id as user_id', 9 'pic1', 10 'year', 11 'month', 12 'day', 13 'store', 14 'discount', 15 'price', 16 'sold_flg') 17 ->leftjoin('companies', 'companies.id', '=', 'products.company_id') 18 ->leftjoin('prefectures', 'prefectures.id', '=', 'companies.prefecture_id') 19 ->leftjoin('orders', 'orders.product_id', '=', 'products.id')->orderBy('product_id', 'desc')->get(); 20 $categories = Category::all(); 21 $prefectures = Prefecture::all(); 22 23 24 25 26 return view('/products/index', compact('productInfo', 'categories', 'prefectures') ); 27 }
検索機能を初めて作ったため、indexメソッドで行ったような複数のtableにinnerjoinする方法がわかりません。
こちらを参考にしました。
https://qiita.com/banku/items/4ac99f9a48d2fc862255
検索機能は
prefecture_id
category_id
price_bottom
price_top
expiration
の五つの項目で検索しています。
controller
1 } 2 public function search(SearchRequest $request){ 3 4 $query = Product::query(); 5 6 $prefecture_id = $request->prefecture_id; 7 $category_id = $request->category_id; 8 $price_bottom = $request->price_bottom; 9 $price_top = $request->price_top; 10 $expiration = $request->expiration; 11 12 if ($request->has('price_bottom') && $price_bottom != null && $request->has('price_top') && $price_top != null ){ 13 $query->whereBetween('discount', [$price_bottom, $price_top])->get(); 14 } 15 16 if ($expiration == null ){ 17 $date = Carbon::now()->format('Y-m-d'); 18 $query->where('expiration', '>', $date)->get(); 19 } 20 21 if ($request->has('prefecture_id') && $prefecture_id != null){ 22 if ($query->company()->where('prefecture_id', $prefecture_id)->get() == true) 23 $query->where('prefecture_id', $prefecture_id)->get(); 24 } 25 26 if ($request->has('category_id') && $category_id != null){ 27 $query->where('category_id', $category_id)->get(); 28 } 29 30 $productInfo = $query->get();//ここで検索結果を取ってますが、ここではproductsのtableの情報しかない。どうすれば、index()のように他のテーブル情報も取ってこれるのかが分かりません。 31 $categories = Category::all(); 32 $prefectures = Prefecture::all(); 33 34 35 return view('/products/index', compact('productInfo', 'categories', 'prefectures')); 36 }
初めてlaravelで検索機能を作るのと、eloquentやquerybuilderのこともまだよく分かっていません。
どのようにすればいいのか、よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー