Laravel: 搜索和过滤数据
Laravel: search and filter data
我想对 laravel 中的数据进行多重过滤,但我显示此错误:
Too few arguments to function Illuminate\Support\Collection::get()
请帮我解决这个问题。
public function searchLanding(Request $request)
{
$landings = Landing::all();
if(count($landings) && !is_null($request->title)) {
$landings = $landings->where("name", "LIKE", "%{$request->title}%")->get();
}
if (count($landings) && !is_null($request->start_at)) {
$landings = $landings->where('start_at', '>=', $request->start_at)->get();
}
if (count($landings) && !is_null($request->end_at)) {
$landings = $landings->where('end_at', '<=', $request->end_at)->get();
}
}
public function searchLanding(Request $request)
{
$landings = Landing::query();
if(!is_null($request->title)) {
$landings->orWhere("name", "LIKE", "%{$request->title}%");
}
if (!is_null($request->start_at)) {
$landings->orWhere('start_at', '>=', $request->start_at);
}
if (!is_null($request->end_at)) {
$landings->orWhere('end_at', '<=', $request->end_at);
}
return $landings->get();
}
注:
当您仍在构建查询时,您不应该调用 all()
或 get()
,只有在您想要获得结果时才调用它们。
当您希望所有条件都为真时使用where()
,
或者当您希望其中一个条件为真时使用 orWhere()
。
在上面的例子中,只有一个条件需要为真,例如在 title
或 start_at
之后或 end_at
.
之前找到搜索
我想对 laravel 中的数据进行多重过滤,但我显示此错误:
Too few arguments to function Illuminate\Support\Collection::get()
请帮我解决这个问题。
public function searchLanding(Request $request)
{
$landings = Landing::all();
if(count($landings) && !is_null($request->title)) {
$landings = $landings->where("name", "LIKE", "%{$request->title}%")->get();
}
if (count($landings) && !is_null($request->start_at)) {
$landings = $landings->where('start_at', '>=', $request->start_at)->get();
}
if (count($landings) && !is_null($request->end_at)) {
$landings = $landings->where('end_at', '<=', $request->end_at)->get();
}
}
public function searchLanding(Request $request)
{
$landings = Landing::query();
if(!is_null($request->title)) {
$landings->orWhere("name", "LIKE", "%{$request->title}%");
}
if (!is_null($request->start_at)) {
$landings->orWhere('start_at', '>=', $request->start_at);
}
if (!is_null($request->end_at)) {
$landings->orWhere('end_at', '<=', $request->end_at);
}
return $landings->get();
}
注:
当您仍在构建查询时,您不应该调用 all()
或 get()
,只有在您想要获得结果时才调用它们。
当您希望所有条件都为真时使用where()
,
或者当您希望其中一个条件为真时使用 orWhere()
。
在上面的例子中,只有一个条件需要为真,例如在 title
或 start_at
之后或 end_at
.