如何将以下三个Laravel Eloquent Queries合并为一个?

时间:2018-02-27 04:35:09

标签: php mysql laravel eloquent laravel-5.6

快速向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。我希望有一个结果包含所需的帖子,上一篇文章到期望的帖子和下一篇文章到期望的帖子

1 个答案:

答案 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)