Laravel 5 Laravel 5.4:筛选并满足请求中的所有参数

Laravel 5 Laravel 5.4:筛选并满足请求中的所有参数,laravel-5,collections,request,product,Laravel 5,Collections,Request,Product,我需要你的帮助。仍然在学习拉威尔的很多知识,并且一直在搜索整个网络,寻找这个问题的可靠答案。我正在尝试获取满足所有给定请求参数的产品集合。因此: ?brand=adidas,nike&gender=women 会给我买所有阿迪达斯和耐克女鞋 到目前为止,我已经做到了: $brandRequest = $request->brand; $brandReqArray = explode(',', $brandRequest); $genderRequest = $request-&

我需要你的帮助。仍然在学习拉威尔的很多知识,并且一直在搜索整个网络,寻找这个问题的可靠答案。我正在尝试获取满足所有给定请求参数的产品集合。因此:

?brand=adidas,nike&gender=women
会给我买所有阿迪达斯和耐克女鞋

到目前为止,我已经做到了:

$brandRequest = $request->brand;
$brandReqArray = explode(',', $brandRequest);

$genderRequest = $request->gender;
$genderReqArray = explode(',', $genderRequest);

$products = Product::with('brands', 'genders')
->whereHas('brands', function($query) use ($brandReqArray)  {
    $query->whereIn('slug', $brandReqArray);
})
->orWhereHas('genders', function($query) use ($genderReqArray)  {
    $query->whereIn('slug', $genderReqArray);
})->paginate(24);
我要买所有的阿迪达斯和耐克鞋,我要买所有的女鞋。但如果我同时尝试这两种方法,那就什么也看不出来了

以下是我的表格结构:

有没有人能给我指出正确的方向,或者甚至有一个解决办法


谢谢!:)

> P>在LARAVEL查询中,当使用<代码> >时,应考虑使用<代码> ->进行条件语句。请注意,您不能以这种方式使用内置分页,它将无法正常工作,因为分页链接是在不考虑URL中存在的参数的情况下构建的,我建议您进行ajax分页

$products = Product::when($request->has('brand'), function ($query)use($request) {
        $brandRequest = $request->input('brand');
        $brandReqArray = explode(',', $brandRequest);

        $query->whereHas('brands', function($q) use ($brandReqArray)  {
            $q->whereIn('slug', $brandReqArray);
        });
    })->when($request->has('gender'), function ($query)use($request) {
        $genderRequest = $request->input('gender');
        $genderReqArray = explode(',', $genderRequest);

        $query->whereHas('genders', function($q) use ($genderReqArray)  {
            $q->whereIn('slug', $genderReqArray);
        });
    })->get();
尝试执行此查询,它应该在不分页的情况下工作

$products = Product::when($request->has('brand'), function ($query)use($request) {
        $brandRequest = $request->input('brand');
        $brandReqArray = explode(',', $brandRequest);

        $query->whereHas('brands', function($q) use ($brandReqArray)  {
            $q->whereIn('slug', $brandReqArray);
        });
    })->when($request->has('gender'), function ($query)use($request) {
        $genderRequest = $request->input('gender');
        $genderReqArray = explode(',', $genderRequest);

        $query->whereHas('genders', function($q) use ($genderReqArray)  {
            $q->whereIn('slug', $genderReqArray);
        });
    })->get();
对于分页,请尝试这种方式,但出于安全考虑,我建议您避免从URL参数构造分页

$products = Product::when($request->filled('brand'), function ($query)use($request) {
        $brandRequest = $request->input('brand');
        $brandReqArray = explode(',', $brandRequest);

        $query->whereHas('brands', function($q) use ($brandReqArray)  {
            $q->whereIn('slug', $brandReqArray);
        });
    })->when($request->filled('gender'), function ($query)use($request) {
        $genderRequest = $request->input('gender');
        $genderReqArray = explode(',', $genderRequest);

        $query->whereHas('genders', function($q) use ($genderReqArray)  {
            $q->whereIn('slug', $genderReqArray);
        });
    })->paginate(10);
    $input = $request->only(['brands', 'gender']);
    $products->appends($input);
请访问我的博客,撰写任何Laravel帮助或查找可能对您有帮助的现有解决方案,

关于ajax分页,请参阅我的一篇旧文章。

你能再详细说明一下这个答案吗?我现在正在尝试,但一直得到相同的结果。您将如何将其应用于我的给定代码?我了解的是,您希望按品牌和性别筛选所有产品,并且在URL请求数据中显示时有条件地使用它?如果我正确,请您添加表结构以首先了解它,检查,我已更新了我的答案,如果您使用的是Laravel 5.5或5.6,您必须将
$request->has()
替换为
$request->filled()
,如第二个示例所示。