具有多个输入的Laravel高级查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有多个输入的Laravel高级查询相关的知识,希望对你有一定的参考价值。

我有多个参数的搜索,如果输入不为null,请查询查询参数。

我尝试了很多方法,但无法获得查询结果。

这是我的示例代码

$products = Product::where('game_id',$tg->id);
        if($keyword !=null){
            $products->where("name","like",$keyword);
        }
        if($price_start !=null){
            $products->where("price",">",$price_start);
        }
        if($price_end !=null){
            $products->where("price","<",$price_end);
        }
        if($avalibility !=null){
            $products->where("status","=",$avalibility);
        }

        $products->orderBy("created_at","DESC");
        $products->get();
答案

尝试将->get()添加到查询构建器。

$products = Product::where('game_id',$tg->id)->orderBy->('created_at', 'desc')->get()

使用查询构建器上的显式->get()来获取集合。然后用laravels收集方法(https://laravel.com/docs/5.8/collections#available-methods)进一步添加where子句并对结果进行排序(请参见sortBy方法),或将orderBy子句添加到初始查询中(如上所述)。您可以省去最后一个->get(),因为它是在查询生成器上调用的。

在if语句中使用'where'收集方法:

if(isset($keyword)) {
    $products = $products->where('name','like', '%' . $keyword . '%');
}
另一答案

首先您需要按照以下步骤validate您的数据

$request->validate([
    'id' => 'required',
    'keyword' => 'required',
    'price_start' => 'required',
    'availability' => 'required'
]); 

现在您可以使用这些validate Data执行数据查询。如果where方法有多个数据,则可以将它们全部放入数组中,然后将其放入fetch中,则应使用get()方法;像波纹管一样>>

$products = Product::where([
              ['id', '=', $request->id],
              ['keyword', 'like', $request->keyword]
            ])
            ->orderBy("created_at","DESC")
            ->get();
另一答案

尝试一下

另一答案

在您的代码中,将查询结果分配给变量产品,如下所示:

以上是关于具有多个输入的Laravel高级查询的主要内容,如果未能解决你的问题,请参考以下文章

具有多个模型的 Laravel ajax 实时搜索查询

具有联接表和来自 GET 参数的多个值的高级查询

使用具有不同片段字段的相同中继根查询的多个 react-router-relay 路由

Laravel - 模型自引用belongsToMany与其他关系和具有多个限制的查询

在一个查询中使用具有多个关联数组的 laravel eloquent 获取数据

Laravel json join,尝试加入具有多个 id 的 JSON 列和具有位置 id 的位置表,查询生成器