Laravel查询生成器多次使用

Laravel查询生成器多次使用,laravel,query-builder,Laravel,Query Builder,是否可以保存一个查询bulider并多次使用它 例如,我有一个模型“旅游” 我创建了一个长查询构建器并对其进行分页: $tour = Tour::where(...)->orWhere(...)->orderBy(...)->paginate(10); 例如,97个模型符合上述查询。 “Paginate”方法输出符合查询条件的前10个模型,但我还需要对所有97个模型执行一些操作。 我不想“重复我自己”写这个长查询两次 所以我想要这样的东西: 在拉雷维尔这样做正确吗?(我的版本

是否可以保存一个查询bulider并多次使用它

例如,我有一个模型“旅游”

我创建了一个长查询构建器并对其进行分页:

$tour = Tour::where(...)->orWhere(...)->orderBy(...)->paginate(10);
例如,97个模型符合上述查询。 “Paginate”方法输出符合查询条件的前10个模型,但我还需要对所有97个模型执行一些操作。 我不想“重复我自己”写这个长查询两次

所以我想要这样的东西:

在拉雷维尔这样做正确吗?(我的版本是5.4)。

您需要使用:


可以,但这没有任何意义,因为每次都会执行一个新的查询。因此,该代码将起作用:

$query = Tour::where(...)->orWhere(...)->orderBy(...);
$tour1 = $query->paginate(10); 
$tour2 = $query->get();
但是,如果只想执行一个查询,则需要使用收集方法对数据进行排序、筛选和映射。您还需要:


对这是正确的方法。我将添加手动创建分页器的方式:使用Illumb\Pagination\LengshawarePaginator作为分页器//获取当前页面:$current_page=Paginator::resolveCurrentPage();//获取当前页面的项目(使用values()方法重置键):$items=$collection->slice($current_page-1)*$paginate,$paginate)->values();//获取项目总数$Total=$collection->count();//分页!:)$tours=new Paginator($items,$total,$paginate,$current_page,['path'=>Paginator::resolveCurrentPath()]);
$query = Tour::where(...)->orWhere(...)->orderBy(...);
$query1 = clone $query;
$query2 = clone $query;

$tour1 = $query1->paginate(10); 
$tour2 = $query2->get();
$query = Tour::where(...)->orWhere(...)->orderBy(...);
$tour1 = $query->paginate(10); 
$tour2 = $query->get();
$collection = Tour::where(...)->orWhere(...)->orderBy(...)->get();
$tour1 = // Make Paginator manually.
$tour2 = $collection;
$sortedByName = $collection->sortBy('name');
$activeTours = $collection->where('active', 1);