我是Laravel的新手,正在尝试建立查询。
我想通过条件添加多个where
,但我无法实现。
如果我这样做,它将起作用:
$query = Frete::all();
//or
$query = Frete::where('estado_destino_id', '=', $request->destino);
但是,我要基于某些条件设置多个where
,例如:
public function fretes(Request $request){
$query = Frete::all();
if ($request->destino){
$query->where('estado_destino_id', '=', $request->destino);
}
if ($request->veiculo){
$query->where('veiculo_id', '=', $request->veiculo);
}
$query->get();
return response()->json($query);
}
上面的代码返回所有表,并且忽略了位置。
我也尝试了此$query = DB::table('fretes');
而不是$query = Frete::all();
这样,返回的JSON是:
{
"connection": {},
"grammar": {},
"processor": {},
"bindings": {
"select": [],
"from": [],
"join": [],
"where": [
1
],
"having": [],
"order": [],
"union": []
},
"aggregate": null,
"columns": null,
"distinct": false,
"from": "fretes",
"joins": null,
"wheres": [
{
"type": "Basic",
"column": "estado_destino_id",
"operator": "=",
"value": 1,
"boolean": "and"
}
],
"groups": null,
"havings": null,
"orders": null,
"limit": null,
"offset": null,
"unions": null,
"unionLimit": null,
"unionOffset": null,
"unionOrders": null,
"lock": null,
"operators": [
"=",
"<",
">",
"<=",
">=",
"<>",
"!=",
"<=>",
"like",
"like binary",
"not like",
"ilike",
"&",
"|",
"^",
"<<",
">>",
"rlike",
"regexp",
"not regexp",
"~",
"~*",
"!~",
"!~*",
"similar to",
"not similar to",
"not ilike",
"~~*",
"!~~*"
],
"useWritePdo": false
}
我看过很多帖子,并且尝试实现它没有成功。
答案 0 :(得分:0)
all()
方法不返回查询。它执行SELECT * FROM table
并返回结果。您需要启动一个新查询,然后向其中添加条件Frete::query();
public function fretes(Request $request){
$query = Frete::query();
if ($request->destino){
$query->where('estado_destino_id', '=', $request->destino);
}
if ($request->veiculo){
$query->where('veiculo_id', '=', $request->veiculo);
}
$results = $query->get();
return response()->json($results);
}
答案 1 :(得分:0)
在这里使用conditional-clauses
public function fretes(Request $request){
$query = Frete::when($request->destino,function($q,$request) {
return $query->where('estado_destino_id', '=', $request->destino);
})->when($request->veiculo,function($q,$request) {
return $query->where('veiculo_id', '=', $request->veiculo);
})->get();
return response()->json($query);
}
有时您可能希望子句仅在某些情况下才应用于查询 否则是真的。例如,您可能只想在 语句,如果传入的请求中存在给定的输入值。 您可以使用when方法完成此操作。