あるブログ記事の前の記事や次の商品を取得する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}}