具有多个输入的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高级查询的主要内容,如果未能解决你的问题,请参考以下文章
使用具有不同片段字段的相同中继根查询的多个 react-router-relay 路由
Laravel - 模型自引用belongsToMany与其他关系和具有多个限制的查询