Laravel Query Builder多次使用

时间:2018-02-27 09:56:29

标签: laravel query-builder

是否可以保存查询版块并多次使用它?

例如,我有一个模型'Tour'。

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

$tour = Tour::where(...)->orWhere(...)->orderBy(...)->paginate(10);

例如,97个模型符合上述查询的条件。 “Paginate”方法输出前10个符合查询条件的模型,但我还需要对所有97个模型进行一些操作。 我不想“重复自己”2次写这个长查询。

所以我想要类似的东西:

$query = Tour::where(...)->orWhere(...)->orderBy(...);

$tour1 = $query->paginate(10); 
$tour2 = $query->get();

这是Laravel的正确方法吗? (我的版本是5.4)。

2 个答案:

答案 0 :(得分:1)

您可以,但它没有任何意义,因为每次执行新查询。所以这段代码将起作用:

$query = Tour::where(...)->orWhere(...)->orderBy(...);
$tour1 = $query->paginate(10); 
$tour2 = $query->get();

但是如果你只想执行一个查询,你需要使用集合方法来排序,过滤和映射数据。您还需要create Paginator instance manually

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

答案 1 :(得分:0)

您需要使用clone

$query = Tour::where(...)->orWhere(...)->orderBy(...);
$query1 = clone $query;
$query2 = clone $query;

$tour1 = $query1->paginate(10); 
$tour2 = $query2->get();