Laravel 5.6在何处搜索
这也在起作用。但问题是当我并没有搜索任何东西时,并没有结果。我是说项目?startdate=&enddate=&search=那里没有结果。我就是不明白。为什么Laravel 5.6在何处搜索,laravel,Laravel,这也在起作用。但问题是当我并没有搜索任何东西时,并没有结果。我是说项目?startdate=&enddate=&search=那里没有结果。我就是不明白。为什么 $search = $request->get('search'); $startdate = $request->input('startdate'); $enddate = $request->input('enddate'); $projects = $projects -
$search = $request->get('search');
$startdate = $request->input('startdate');
$enddate = $request->input('enddate');
$projects = $projects
->where(function ($query) use ($search) {
$query->orWhere('lastname', 'like', '%'.$search.'%')
->orWhereRaw("(firstname) LIKE '%$search%'")
->orWhereRaw("(register) LIKE '%$search%'");
})
->whereBetween('created_at', [$startdate, $enddate])
->orderBy("created_at", 'desc')
->paginate(10);
return view('projects.index', compact('projects'));
不搜索任何内容时,$search、$startdate和$enddate为空。 whereBetween不适用于空值 仅当变量具有值时才向查询添加约束: $query=$projects->query; 如果是null$search吗{ $query->wherefunction$query使用$search{ $query->orWhere'lastname'、'like'、'%'。$search'% ->或其中的'firstname'、'like'、'%'。$search.'% ->或其中的'register'、'like'、'%'.$search.'%'; } } 如果是空的$startdate&!是null$enddate吗{ $query->whereBetween'created_at',[$startdate$enddate] } $projects=$query->orderBycreated_位于'desc'->paginate10; 不要使用->或WhereRawFirstName之类的内容,如“%$search%”。
这是一个巨大的安全风险:可能有两种方法: 根据空值检查两个日期变量,然后 将其附加到查询筛选器
$startdate = $request->input('startdate');
$enddate = $request->input('enddate');
if(!is_null($startdate) && !is_null($enddate)) {
$query->whereBetween('created_at', [$startdate, $enddate]
}
如果中未提供,则可以将默认值设置为日期范围
请求
你希望它会回来什么?我的回答中添加了一个重要的安全警告,请看一看。哦,我以前听说过SQL注入。天哪,先生,真的非常感谢你。
/* if startdate value is null, it will set default date, as 1 year back from current date */
$startdate = $request->input('startdate', Carbon::now()->subYears(1));
/* if enddate value is null, it will set default date, as current date */
$enddate = $request->input('enddate', Carbon\Carbon::now());