Laravelでレコードの前後を取得するSQLを生成する方法

あるブログ記事の前の記事や次の商品を取得するSQL

Laravelでprev/nextを取得

Laravelであるレコードの前後のデータを取得するSQLを生成します。

前後のデータを得る純粋なSQLです。

prev

select * from `products` where `id` < '2' order by `id` desc limit 1

next

select * from `products` where `id` > '2' order by `id` asc limit 1

productsテーブルでidが2のレコードを中心にして、ひとつ前のレコードとひとつ後のレコードを取得するSQLになります。

LaravelのQuery BuilderでSQLを生成

上で載せたSQLをLaravelで生成します。最初に中心値をセットしておきます。

$base = 2;

Query BuilderでSQLを生成するコードです。

$prev = Product::where('id', '<', $base)->orderBy('id', 'desc')->limit('1')->first();
$next = Product::where('id', '>', $base)->orderBy('id')->limit('1')->first();

あるレコードの前後のデータが各変数に格納されました。

Viewに渡す

ControllerからcompactでまとめてViewで利用可能な状態にします。

return View::make('hello')->with(compact('prev', 'next'));

Bladeテンプレートで変数を展開して、記事や商品の前後データを表示することができます。

{{$prev->title}}
{{$next->title}}

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Laravelでレコードの前後を取得するSQLを生成する方法の記事にコメントを投稿