質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

552閲覧

検索を一つのフォームから複数のフォームに変更したい

mowry

総合スコア15

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/06/10 16:57

編集2021/06/10 23:45

一つのフォーム(商品名[product_name])から部分一致で検索をかけ、自画面にリダイレクトはできている状態です。
フォーム(メーカー名[company_id])をもうひとつつくり、そちらも部分一致で検索をかけて自画面にリダイレクトできるようにしたいです。
その場合、コントローラーをどのように書き換えたらいいのか教えていただきたいです。
dd($company);でデータの受け取りは確認できております。

public function find(Request $request) { $products = $request->product_name; $company = $request->company_id; ーーーー↓(ここからの内容を書き換えたい)ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー if($products != ''){ $products = Product::where('product_name','like','%'.$products.'%')->orderBy('created_at','desc')->paginate();} else {$products = Product::orderBy('created_at','desc')->paginate();} return view('home',['products' => $products]); ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー }
---------------list.blade.php--------------------- <form action="{{ route('find') }}" method="get"> <input type="text" name="product_name" value="" placeholder="商品名を入力してください"> <select name="company_id" value="{{ old('company_id') }}"> <option disabled selected value>メーカーを選択してください</option> @foreach($companies as $company) <option value="{{$company->id}}">{{$company->company_name}}</option> @endforeach </select> <input type="submit" value="検索"> </form> <div class="row"> <div class="col-md-10 col-md-offset-2"> <h2>商品一覧</h2> @if (session('err_msg')) <p class="text-danger"> {{ session('err_msg') }} </p> @endif <table class="table table-striped"> <tr> <th>id</th> <th>商品画像</th> <th>商品名</th> <th>価格</th> <th>在庫数</th> <th>メーカー名</th> <th></th> </tr> @foreach($products as $product) <tr> <td>{{ $product->id }}</td> <td><img src="{{ asset('storage/' . $product['product_image']) }}" width="30" height="100"></td> <td><a href="/home/{{ $product->id }}">{{ $product->product_name }}</a></td> <td>{{ $product->price }}</td> <td>{{ $product->stock }}</td> <td>{{ $product->company->company_name }}</td> <form method="POST" action="{{ route('delete', $product->id) }}" onSubmit="return checkDelete()"> @csrf <th><button type="submit" class="btn btn-primary" onclick=>削除</button></th> </form> </tr> @endforeach </table> </div> </div> <script> function checkDelete() { if (window.confirm('削除してよろしいですか?')) { return true; } else { return false; } } </script>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/06/10 20:29

そのフォームのhtml提示されないと何とも言えないのでは。
m.ts10806

2021/06/10 20:30

あと、同時に検索することはあり得るのかどうかでも違います。
FKM

2021/06/11 01:08

すごいPHPの基本的な部分を質問してる気がしますが… toSqlメソッドでSQLを吐き出すことができるので、それで調べていきましょう。
guest

回答2

0

ベストアンサー

下記ソースで何をしているか、今後のソース修正で何をすればいいのか見えてくれば幸いです。

まず、質問者様のソースコードは、以下のように整理できます。
同じ動きになるはずです。

before

PHP

1public function find(Request $request) 2 { 3 $products = Product::orderBy('created_at','desc'); 4 5 $product_name = $request->product_name; 6 7 if($product_name != ''){ 8 $products->where('product_name','like','%'.$products.'%'); 9 } 10 11 $res = $products->paginate(); 12 13 return view('home',['products' => $res]); 14 }

これにcompanyの検索条件を追加する。
同じ方法で他の検索条件も追加できます。

after

PHP

1public function find(Request $request) 2 { 3 $products = Product::orderBy('created_at','desc'); 4 5 $product_name = $request->product_name; 6 $company = $request->company_id; // メーカー名なのにcompany_idという名前はトラブルの元になりそうなので避けるべき 7 8 if($product_name != ''){ 9 $products->where('product_name','like','%'.$products.'%'); 10 } 11 12 if($company != ''){ 13 $products->where('company','like','%'.$company.'%'); 14 } 15 16 $res = $products->paginate(); 17 18 return view('home',['products' => $res]); 19 }

投稿2021/06/11 02:32

hiro_app

総合スコア123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro_app

2021/06/11 04:00

質問内容に部分一致で検索とあったのでLIKE検索をしていますが、実はイコールの検索が正しいという場合は「where('company','like','%'.$company.'%');」この部分を修正してください。
guest

0

定義があいまいです
product_nameとcompany_idの両方が提示された場合or/and検索なのでしょうか?
andならwhereを複数回設定し、orならorWhereを使って下さい

またセレクトボックスで値を渡すcompany_idが部分一致というのも合理的ではありません

投稿2021/06/11 02:23

yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問