是否可以保存查询版块并多次使用它?
例如,我有一个模型'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)。
答案 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();