matsudada技術ブログ

日々の雑念と備忘録

Laravel 5.7:生のSQLを利用してページネーション

Laravel 5.7:生のSQLを利用してページネーション

クエリビルダーでページネーションをするサンプルは多いが、

生のSQLからページネーションをする例は少なかったため記載

環境

現象

クエリビルダーからはpaginateを呼ぶことができるが、

DB::selectは、結果がarrayなのでpaginateが呼べない。

$perPage = 50;

$rawQuery = "
    select
        hoge
    from
        table_a";

$result = \DB::select(\DB::raw("{$rawQuery}")); // ⇒結果がarrayなので、paginateは呼べない

対応

副問い合わせの形でクエリビルダに入れ込んだ。

$perPage = 50;

$rawQuery = "
    select
        hoge
    from
        table_a";

$result = \DB::table(\DB::raw("({$rawQuery}) as alias"))
->select("hoge")
->paginate($perPage);

結果の表示

<div>
    <form>
        {{-- 検索条件 --}}
    </form>
</div>

<div>
    @if(!empty($results))
    <div>
        @foreach($results as $row)
        <div>{{ $row->hoge }}</div>
        @endforeach
    </div>
    
    <div>
        {{ $results->appends($_GET)->links() }}
    </div>
    @endif
</div>