快速向Laravel和mysql专家提问,我有三个问题如下: -
// Only Can use slug here
$post = Post::whereSlug($slug)->with(['category', 'author'])->first();
$prevPost = Post::where('id', '<', $post->id)
->select('id', 'title', 'slug')
->orderBy('id', 'desc')
->first()
$nextPost = Post::where('id', '>', $postId)
->select('id', 'title', 'slug')
->orderBy('id')
->first()
有什么方法可以将所有三个查询合并为一个。我想将所有三个查询合并为一个,对于最后两个查询,我需要$ post-&gt; id。我希望有一个结果包含所需的帖子,上一篇文章到期望的帖子和下一篇文章到期望的帖子
答案 0 :(得分:0)
最好的方法是使用某种范围来实现这一目标:
public function scopeOfId($query, $id, $operator, $orderBy = "asc") {
$query->where('id', $operator, $id)
->select('id', 'title', 'slug')
->orderBy('id', $orderBy)
}
然后你会真的称它为Post::ofId(5, "<")
或Post::ofId(5, "<", "desc")
或任何组合。此外,where('id', '>', $postId)
和where('id', '<', $postId)
可以组合到此单一状态中,其中statemenet =&gt; where('id', '!=', $postId)
。