Laravel 5搜索结果分页
问题描述:
我创建了一些使用文本框和下拉菜单的搜索过滤器,所以当我单击搜索按钮时,我想使用这些过滤器中的任何一个来查询雄辩的关系。Laravel 5搜索结果分页
搜索工作正常,我得到正确数量的结果,但问题在于分页。当我点击下一页按钮(或任何其他页面)时,结果就是结果,我再次得到一切。
我知道这一点,因为我没有做单击分页时的请求,所以我的问题是我如何执行如此相同的查询,但使用分页?
这里是我的控制器功能
public function index(Request $request)
{
if(!empty($request)) {
$products = Product::with(['supplier', 'carrier', 'name']);
if($request->name) {
$products = $products->whereHas('Name', function ($query) use ($request) {
$products = $query->where('Name', $request->name);
});
}
if($request->subtype) {
$products = $products->whereHas('SubType', function ($query) use ($request) {
$products = $query->where('SubTypeId', $request->subtype);
});
}
if($request->supplier) {
$products = $products->whereHas('Supplier', function ($query) use ($request) {
$products = $query->where('SupplierId', $request->supplier);
});
}
if($request->carrier) {
$products = $products->whereHas('Carrier', function ($query) use ($request) {
$products = $query->where('CarrierId', $request->carrier);
});
}
$products = $products->paginate(8);
}
else {
$products = Product::with(['supplier', 'carrier', 'name'])->paginate(8);
}
$suppliers = Supplier::all();
$carriers = Carrier::all();
$subtypes = SubType::all();
$options = array(
'products' => $products,
'suppliers' => $suppliers,
'subtypes' => $subtypes,
'carriers' => $carriers
);
return view('products.index')->with($options);
}
答
我能够通过改变控制器功能来修复它。我没有IF语句
$products = Product::with(['supplier', 'carrier', 'name']);
if($request->name) {
$products = $products->whereHas('Name', function ($query) use ($request) {
$query->where('Name', $request->name);
});
}
if($request->subtype) {
$products = $products->whereHas('SubType', function ($query) use ($request) {
$query->where('SubTypeId', $request->subtype);
});
}
if($request->supplier) {
$products = $products->whereHas('Supplier', function ($query) use ($request) {
$query->where('SupplierId', $request->supplier);
});
}
if($request->carrier) {
$products = $products->whereHas('Carrier', function ($query) use ($request) {
$query->where('CarrierId', $request->carrier);
});
}
$products = $products->paginate(8);
$suppliers = Supplier::all();
$carriers = Carrier::all();
$subtypes = SubType::all();
$options = array(
'products' => $products,
'suppliers' => $suppliers,
'subtypes' => $subtypes,
'carriers' => $carriers
);
return view('products.index')->with($options);
在我看来,我把分页链接,我换成
{{ $products->links() }}
与
{{ $products->appends(\Request::except('_token'))->render() }}
不相关的问题,但只是一个侧面说明:您不需要执行'$ products = $ query-> where(...)',只需要'$ query-> where(...)'就足够了。 – madpoet