2017-10-09 111 views
1

我创建了一些使用文本框和下拉菜单的搜索过滤器,所以当我单击搜索按钮时,我想使用这些过滤器中的任何一个来查询雄辩的关系。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); 
} 
+0

不相关的问题,但只是一个侧面说明:您不需要执行'$ products = $ query-> where(...)',只需要'$ query-> where(...)'就足够了。 – madpoet

回答

1

我能够通过改变控制器功能来修复它。我没有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() }}