開発環境
- laravel6.0.3
- php7.2.22
- mysql8.0.17
- Mac
laravel初心者です。
カテゴリ検索時、SQLでcategory_idで絞り込みができずに、全件表示されてしまいます。
Controller内に、category_idの値は入ってきているのですが、
where句以下のSQLが読み込まれません。
SQLの順序をwhere句を最初に持ってきて、paginateを最後に持ってくるように変えてみたりしたのですが、うまくいかず、困っています。
どのようにすれば、where句をつけて絞り込むことができるのか、ご教授願います。
Controller
1class RecordsController extends Controller 2{ 3 //初期表示用関数 4 public function index(Request $request) 5 { 6 //カテゴリ絞り込み検索表示用 7 $categories = DB::table('categories')->distinct()->get(); 8 9 //一覧表示用 10 $records = Record::latest()->paginate(10); 11 $records->load('category'); 12 13 $category_list = $request->category_list; 14 15 //カテゴリ検索時 16 if(isset($category_list)){ 17 $records->where('category_id', '=', $category_list); 18 } 19 20 return view('records.index', [ 21 'categories' => $categories, 22 'records' => $records 23 ]); 24 } 25 ・ 26 ・ 27 ・ 28}
View
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="utf-8"> 5 <title>チリツモ</title> 6 <link rel="stylesheet" href="/css/styles.css"> 7 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> 8 <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> 9 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> 10 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> 11</head> 12<body> 13 <div class="container"> 14 <h1>チリツモ</h1> 15 <section class="header_menu"> 16 <a href="{{ action('RecordsController@create') }}">今日の記録</a> 17 <a href="{{ action('CategoriesController@maintenance') }}">カテゴリ一覧</a> 18 </section> 19 20 <section class="records_list"> 21 <form action="{{ action('RecordsController@index')}}" method="POST"> 22 @csrf 23 カテゴリー名<select name="category_list"> 24 <option value="">選択してください</option> 25 @forelse($categories as $category) 26 <option value="{{$category->id}}" @if (old('category')==="{{$category->id}}") selected @endif >{{$category->name}}</option> 27 @empty 28 <p>カテゴリーがありません。</p> 29 @endforelse 30 </select> 31 <input type="submit" value="検索" name="search_btn"> 32 <input type="hidden" name="_token" value="{{csrf_token()}}"> 33 </form> 34 35 @forelse ($records as $record) 36 <ul> 37 <li>{{ $record->category->name }}</li> 38 <li>{{ $record->time }}時間</li> 39 <li>{{ $record->created_at }}</li> 40 <form method="POST" action="/records/delete/{{$record->id}}" > 41 @csrf 42 43 <input type="submit" value="削除" name="del_btn" onclick='return confirm("削除してよろしいですか?");'> 44 </form> 45 <div class="progress"> 46 <div class="progress-bar bg-warning" role="progressbar" style="width: 75%" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100"></div> 47 </div> 48 </ul> 49 @empty 50 <p class="error">記録がありません。</p> 51 @endforelse 52 </section> 53 {{-- ページネーションバー--}} 54 <span class="pagination">{{ $records->links() }}</span> 55 </div> 56 <script src="/js/main.js"></script> 57</body> 58</html>
Model
1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Category extends Model 8{ 9 protected $fillable = ['id', 'name']; 10 11 //学習記録を取得 12 public function records(){ 13 return $this->hasMany('App\Record'); 14 } 15} 16 17
Model
1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Record extends Model 8{ 9 10 protected $fillable = [ 11 'id', 12 'category_id', 13 'time' 14 ]; 15 16 //このカテゴリを所有する学習記録を取得 17 public function category(){ 18 return $this->belongsTo(Category::class, 'category_id'); 19 } 20} 21 22} 23
Route
1Route::match(['get', 'post'], '/', 'RecordsController@index');
回答2件
あなたの回答
tips
プレビュー