原文: https://jellybool.com/post/laravel-get-next-and-prev-posts-with-eloque...
まず第一に、記事の由来 SF についての質問に来ます:
Laravel の Eloquent ORM で現在のレコードの次のレコードを取得する方法
そして、答えに解決策を簡単に書きました。ただし、次の項目と前の項目を取得するこの記録は、日常の開発では依然として頻繁に発生するため、最も一般的なシナリオは、記事の前の記事と次の記事を取得することである可能性があります。実際、これを Laravel の Eloquent で実装するのは非常に簡単ですが、Laravel は対応するメソッドを直接提供していないため、小さなトリックを使用する必要があります:
protected function getPrevArticleId($id) { return Article::where('id', '<', $id)->max('id'); }
$id は現在の記事の ID です。max() を使用して、現在の 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>
前後の記事を処理するソリューションが完成しました。
ハッピーハッキング