souwasora
@souwasora (takei souwa)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Laravel ページネーション

解決したいこと

ここに解決したい内容を記載してください。

例)
現在LaravelでECサイトを作成しています。
商品一覧サイトで金額で絞り込みを考えています。
しかし、1ページ目は表示されるのですが、2ページ目は表示されません
解決方法を教えて下さい。

商品一覧ページ
image.png

50000チェックした状態 1ページ目
image.png

発生している問題・エラー

2ページ目が表示されない
image.png

該当するソースコード

controller

public function serch(Request $request)
    {
        $brands = DB::table('brands')->orderBy('name','asc')->get();
        $keyword_name = $request->name;
        if(!empty($keyword_name))
        {
            $query = Item::query();
            $items = $query->where('name','like', '%' .$keyword_name. '%')->paginate(15);
            return view('home.index',compact('request','brands'))->with([
                'items' => $items
            ]);
        }

       
        $keyword = $request->input('price');
        
        if(!empty($keyword))
        {
            $query = Item::query();
           
            $items = $query->where('price', '>', $keyword)->paginate(15);

            return view('home.index',compact('request','brands'))->with([
                'items' => $items
            ]);
            
        }
       

    }

view

<div class="col-2">  
      <form action="{{ url('serch')}}" method="post">
            {{ csrf_field()}}
            {{method_field('get')}}
            <div class="form-group">
                  <input type="text" class="form-control col-md-5" placeholder="名前を入力してください" name="name">
            </div> 
            <label>
                  <input type="checkbox" name="price" value="10000" {{ old('price') == '10000' ? 'checked' : '' }}> 10000</br>
                  <input type="checkbox" name="price" value="30000" {{ old('price') == '30000' ? 'checked' : '' }}> 30000</br>
                  <input type="checkbox" name="price" value="50000" {{ old('price') == '50000' ? 'checked' : '' }}> 50000
            </label>
            <div style="text-align:right;"><input type="submit" class="btn btn-primary col-md-5" value="検索"></div>
      </form>
      
      <div style="padding: 40.40px;line-height: 30px;">
            <p>ブランド一覧</p> 
            @foreach ($brands as $brand)
                  <a href="{{ route('user.brand_show',['id'=>$brand->id]) }}" style="cursor:default;color:inherit;text-decoration:none;">
                        {{ $brand->name }}</br>
                  </a>
            @endforeach   
      </div>
</div>

自分で試したこと

商品一覧ページでフォーム検索、金額絞り込みを使わない場合、問題なくページネーションは動きます。
2ページ目(16)個目の商品は表示されます。
なぜ、1ページ目は問題なく表示できるのに2ページ目は表示されないのでしょうか?

0

2Answer

$keyword_name$keywordが空なのではないでしょうか?
その場合、何も返していません。

public function serch(Request $request)
{
    // 省略
    $keyword_name = $request->name;
    if(!empty($keyword_name))
    {
        // 省略
    }
       
    $keyword = $request->input('price');    
    if(!empty($keyword))
    {
        // 省略    
    }
     
    // $keyword_nameも$keywordも空の場合
}
0Like

Comments

  1. @souwasora

    Questioner

    @blue32a様
    ご返信ありがとうございます。
    $keyword_nameは検索フォームで記入した文字が反映されます。問題今のところなく検索できています。
    また、$keywordの場合はチェックボックスでチェックした値
    10000を押下した場合
    $keywordには10000が入ります。
    なので、 $items = $query->where('price', '>', $keyword)->paginate(15);
    上記文で10000を超える商品だけ表示しています。
    画像も載せていますが、50000をチャックした場合きちんと50000円以上の商品だけが、抽出されています。

Your answer might help someone💌