Laravel Eloquent多步分割查询。

7

我认为标题有点令人困惑,我会尽可能好地解释一下。假设我有一个相当大的查询用于搜索帖子,类似于以下内容:

$posts = Post::select('...')
           ->leftJoin('...')
           ->leftJoin('...')
           ->where('...')
           ->orWhere('...')
           ->orderBy('...')
           ->orderBy('...')
           ->groupBy('...')
           ->with('...')
           ->paginate(8);

我该如何拆分这个查询?例如:
$posts = Post::select('...')
           ->leftJoin('...')
           ->leftJoin('...')

$posts->where('...')
      ->orWhere('...');

$posts->orderBy('...')
      ->orderBy('...')
      ->groupBy('...');

$posts->with('...')
      ->paginate(8);

我正在使用Laravel 4.2,并尝试了几种方法(包括这篇文章),但无法使其正常工作。我需要它来搜索和过滤帖子。


你能发布你正在使用的实际代码吗?你得到了什么错误? - Jonathan Crowe
1个回答

21

开始创建您的模型的新实例并将其设置为变量,使用该变量构建您的查询,最后以get()结尾:

$posts = new Post;
$posts = $posts->where('...');
$posts = $posts->orWhere('...');
$posts = $posts->orderBy('...');
...
$posts = $posts->get();

不过,与其进行所有这些的链接,您可能可以通过使用查询作用域和一些良好结构化的关系方法来简化事情。


非常好用,我试过在 $posts->where('...') 后面加上代码,关键是要使用 $posts = $posts->where('...')。谢谢。 - JasonK
当我们需要一个变量$postsOrdered来获取有序结果和另一个变量$posts来获取无序结果时,是否会出现问题? $posts = new Post; $posts = $posts->where('...'); $posts = $posts->orWhere('...'); $postsOrdered = $posts->orderBy('...'); ... $posts = $posts->get(); $posts的结果会受到上面的$postsOrdered的影响,即$posts也会被排序。 我该如何解决这个问题? - Vishnu S Babu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接