LaravelのversionとしてはLaravel Framework 8.27.0を使っています。
Userとしてログインし、情報を入力して、それをBoardに保存して、検索によって、そのBoardの情報を取り出すことができる様なアプリを作ろうとしております。
UserとBoardの情報が結びついていることがわかる様に、withによるEagerローディングを使って、検索結果のBoardの情報の隣にUserのnameを表示できる様にはできました。
ここで、検索項 info_1 ~ info_5 のうち、送信された一つの入力値でもBoardに保存されているものの持つ項に一致するものがあれば、取り出せる様にしたいです。
即ち、検索項 info_1 ~ info_5 のうち、空きの状態で送信しても他の項が入力されていれば、入力値に適うものを取り出したいです(全て空きの場合は全てのBoard情報を取り出す)。
知識がない状態で実現しようとすると、以下の様な無骨な場合訳になりますが、スマートな記述の仕方があればご教授いただきたいです。
HelloController
1 if($request->info_1 = null) { 2 $items = Board::with('user')->orWhere('info_1', 'like', '%' . $request->info_1 . '%') 3 ->where('info_2', 'like', '%' . $request->info_2 . '%') 4 ->where('info_3', 'like', '%' . $request->info_3 . '%') 5 ->where('info_4', 'like', '%' . $request->info_4 . '%') 6 ->where('info_5', 'like', '%' . $request->info_5 . '%') 7 ->get(); 8 } 9 if($request->info_2 = null) { 10 $items = Board::with('user')->where('info_1', 'like', '%' . $request->info_1 . '%') 11 ->orWhere('info_2', 'like', '%' . $request->info_2 . '%') 12 ->where('info_3', 'like', '%' . $request->info_3 . '%') 13 ->where('info_4', 'like', '%' . $request->info_4 . '%') 14 ->where('info_5', 'like', '%' . $request->info_5 . '%') 15 ->get(); 16 } 17 if($request->info_3 = null) { 18 $items = Board::with('user')->where('info_1', 'like', '%' . $request->info_1 . '%') 19 ->where('info_2', 'like', '%' . $request->info_2 . '%') 20 ->orWhere('info_3', 'like', '%' . $request->info_3 . '%') 21 ->where('info_4', 'like', '%' . $request->info_4 . '%') 22 ->where('info_5', 'like', '%' . $request->info_5 . '%') 23 ->get(); 24 } 25 if($request->info_4 = null) { 26 $items = Board::with('user')->where('info_1', 'like', '%' . $request->info_1 . '%') 27 ->where('info_2', 'like', '%' . $request->info_2 . '%') 28 ->where('info_3', 'like', '%' . $request->info_3 . '%') 29 ->orWhere('info_4', 'like', '%' . $request->info_4 . '%') 30 ->where('info_5', 'like', '%' . $request->info_5 . '%') 31 ->get(); 32 } 33 if($request->info_5 = null) { 34 $items = Board::with('user')->where('info_1', 'like', '%' . $request->info_1 . '%') 35 ->where('info_2', 'like', '%' . $request->info_2 . '%') 36 ->where('info_3', 'like', '%' . $request->info_3 . '%') 37 ->where('info_4', 'like', '%' . $request->info_4 . '%') 38 ->orWhere('info_5', 'like', '%' . $request->info_5 . '%') 39 ->get(); 40 } 41 if($request->info_1 = null and $request->info_2 = null) { 42 $items = Board::with('user')->orWhere('info_1', 'like', '%' . $request->info_1 . '%') 43 ->orWhere('info_2', 'like', '%' . $request->info_2 . '%') 44 ->where('info_3', 'like', '%' . $request->info_3 . '%') 45 ->where('info_4', 'like', '%' . $request->info_4 . '%') 46 ->where('info_5', 'like', '%' . $request->info_5 . '%') 47 ->get(); 48 } 49 if($request->info_1 = null and $request->info_3 = null) { 50 $items = Board::with('user')->orWhere('info_1', 'like', '%' . $request->info_1 . '%') 51 ->where('info_2', 'like', '%' . $request->info_2 . '%') 52 ->orWhere('info_3', 'like', '%' . $request->info_3 . '%') 53 ->where('info_4', 'like', '%' . $request->info_4 . '%') 54 ->where('info_5', 'like', '%' . $request->info_5 . '%') 55 ->get(); 56 } 57 if($request->info_1 = null and $request->info_4 = null) { 58 $items = Board::with('user')->orWhere('info_1', 'like', '%' . $request->info_1 . '%') 59 ->where('info_2', 'like', '%' . $request->info_2 . '%') 60 ->where('info_3', 'like', '%' . $request->info_3 . '%') 61 ->orWhere('info_4', 'like', '%' . $request->info_4 . '%') 62 ->where('info_5', 'like', '%' . $request->info_5 . '%') 63 ->get(); 64 } 65 if($request->info_1 = null and $request->info_5 = null) { 66 $items = Board::with('user')->orWhere('info_1', 'like', '%' . $request->info_1 . '%') 67 ->where('info_2', 'like', '%' . $request->info_2 . '%') 68 ->where('info_3', 'like', '%' . $request->info_3 . '%') 69 ->where('info_4', 'like', '%' . $request->info_4 . '%') 70 ->orWhere('info_5', 'like', '%' . $request->info_5 . '%') 71 ->get(); 72 } 73 if($request->info_2 = null and $request->info_3 = null) { 74 $items = Board::with('user')->where('info_1', 'like', '%' . $request->info_1 . '%') 75 ->orWhere('info_2', 'like', '%' . $request->info_2 . '%') 76 ->orWhere('info_3', 'like', '%' . $request->info_3 . '%') 77 ->where('info_4', 'like', '%' . $request->info_4 . '%') 78 ->where('info_5', 'like', '%' . $request->info_5 . '%') 79 ->get(); 80 } 81 if($request->info_2 = null and $request->info_4 = null) { 82 $items = Board::with('user')->where('info_1', 'like', '%' . $request->info_1 . '%') 83 ->orWhere('info_2', 'like', '%' . $request->info_2 . '%') 84 ->where('info_3', 'like', '%' . $request->info_3 . '%') 85 ->orWhere('info_4', 'like', '%' . $request->info_4 . '%') 86 ->where('info_5', 'like', '%' . $request->info_5 . '%') 87 ->get(); 88 } 89 90 91...... 92 93 94 95 if($request->info_1 = null and $request->info_2 = null and $request->info_3 = null and $request->info_4 = null and $request->info_5 = null) { 96 $items = Board::with('user')->orWhere('sports', 'like', '%' . $request->sports . '%') 97 ->orWhere('area', 'like', '%' . $request->area . '%') 98 ->orWhere('univ', 'like', '%' . $request->univ . '%') 99 ->orWhere('circle', 'like', '%' . $request->circle . '%') 100 ->orWhere('date', 'like', '%' . $request->date . '%') 101 ->get(); 102 }
回答2件
あなたの回答
tips
プレビュー