ホームページ  >  記事  >  バックエンド開発  >  Laravel Eloquentは前後のデータを取得します

Laravel Eloquentは前後のデータを取得します

WBOY
WBOYオリジナル
2016-06-20 12:52:071230ブラウズ

原文: https://jellybool.com/post/laravel-get-next-and-prev-posts-with-eloque...

まず第一に、記事の由来 SF についての質問に来ます:

Laravel の Eloquent ORM で現在のレコードの次のレコードを取得する方法

そして、答えに解決策を簡単に書きました。ただし、次の項目と前の項目を取得するこの記録は、日常の開発では依然として頻繁に発生するため、最も一般的なシナリオは、記事の前の記事と次の記事を取得することである可能性があります。実際、これを Laravel の Eloquent で実装するのは非常に簡単ですが、Laravel は対応するメソッドを直接提供していないため、小さなトリックを使用する必要があります:

前の記事 ID を取得

protected function getPrevArticleId($id)    {        return Article::where('id', '<', $id)->max('id');    }

$id は現在の記事の ID です。max() を使用して、現在の ID よりも小さい最大値を取得します。これは、現在の ID よりも前の記事の ID です。

前の記事のIDを取得します

protected function getNextArticleId($id)    {        return Article::where('id', '>', $id)->min('id');    }

基本的には同じことが言えます。次の記事の ID を取得するのは、実際には逆のプロセスです。よく理解してください。

前後の記事の記事 ID を取得したら、次のような好きなことを実行できます。

$next_article = Article::find($this->getNextArticleId($article->id));

もう少し言葉を言ってください

何をif 記事の管理では、実際にこれを行うことができます:

記事テーブルにpublished_atフィールドを追加します。ここでは、published_atフィールドをCarbonオブジェクトに設定し、それを前面に表示します。記事を表示するかどうかはpublished_atに基づいて判断できます。

例: クエリ文:

 public function scopePublished($query)    {        $query->where('published_at','<=',Carbon::now());    }//以上方法位于Article中,下面的查询我放在了ArticleController中$articles = Article::latest('published_at')->published()...

ビュー表示:

<li class="previous">@if($prev_article)<a href="/post/{{ $prev_article->slug }}" rel="prev"><i class="fa fa-chevron-left"></i><strong>上一篇</strong><span>  {{ $prev_article->title }}</span> </a>@endif</li><li class="next">@if($next_article && $next_article->published_at < Carbon\Carbon::now())<a href="/post/{{ $next_article->slug }}" rel="next"><i class="fa fa-chevron-right"></i><strong>下一篇</strong> <span>  {{ $next_article->title }}</span></a>@endif</li>

前後の記事を処理するソリューションが完成しました。

ハッピーハッキング

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。