Php 具有多个条件的laravel 6搜索查询
我有一个搜索表单,包含四个字段:客户电子邮件、供应商名称、状态和fromdate、todate,。我的搜索筛选器工作不正常。我希望如果有人搜索供应商名称和状态为“活动”的潜在客户,则它只显示该供应商状态为“活动”的潜在客户,但此处显示的潜在客户同时具有“接受”或“拒绝”以及“我的日期过滤器”不起作用,因此请帮助我。请引导我 我的控制器代码是Php 具有多个条件的laravel 6搜索查询,php,laravel,Php,Laravel,我有一个搜索表单,包含四个字段:客户电子邮件、供应商名称、状态和fromdate、todate,。我的搜索筛选器工作不正常。我希望如果有人搜索供应商名称和状态为“活动”的潜在客户,则它只显示该供应商状态为“活动”的潜在客户,但此处显示的潜在客户同时具有“接受”或“拒绝”以及“我的日期过滤器”不起作用,因此请帮助我。请引导我 我的控制器代码是 public function search(Request $request){ $users = DB::table('users')-
public function search(Request $request){
$users = DB::table('users')->where('is_admin', Null)->get();
$customer_email = $request->input('customer_email');
$vendor_id = $request->input('vendor_id');
$status = $request->input('lead_status');
$leads = DB::table('leads')
->leftJoin('users', 'leads.vendor_id', '=', 'users.id')
->select('leads.*', 'users.name')
->where('vendor_id', $vendor_id)
->orWhere('customer_email', $customer_email)
->orWhere('lead_status', $status)
->orWhere('leads.created_at', array($request->start_date, $request->end_date))
->orderBy('leads.created_at', 'DESC')->get();
//dd($leads);
return view('admin.view-leads', compact('leads'), compact('users'));
}
请帮忙。
提前谢谢
您应该像下面那样编写查询
$leads = DB::table('leads')
->leftJoin('users', 'leads.vendor_id', '=', 'users.id')
->select('leads.*', 'users.name')
->where('vendor_id', $vendor_id)
->when($customer_email, function($q,$customer_email){
$q->where('customer_email', $customer_email);
})
->when($status, function($q,$status){
$q->where('lead_status', $status);
})
->where(function($q) use($request){
if(isset($request->start_date) && isset($request->end_date)){
$fromDate = date('Y-m-d H:i:s',strtotime($request->start_date));
$toDate= date('Y-m-d H:i:s',strtotime($request->end_date));
$q->where('leads.created_at', '>=', $fromDate)
->where('leads.created_at', '<=', $toDate);
}
})
->orderBy('leads.created_at', 'DESC')->get();
$leads=DB::table('leads')
->leftJoin('users','leads.vendor_id','=','users.id')
->选择('leads.*','users.name')
->其中('vendor\u id',$vendor\u id)
->when($customer\u email,function($q,$customer\u email){
$q->where('customer\u email',$customer\u email);
})
->when($status,function($q,$status){
$q->where('lead_status',$status);
})
->其中(函数($q)使用($request){
if(isset($request->start\u date)和&isset($request->end\u date)){
$fromDate=date('Y-m-d H:i:s',STROTTIME($request->start_date));
$toDate=date('Y-m-d H:i:s',strottime($request->end_date));
$q->where('leads.created_at','>=',$fromDate)
->where('leads.created_at','这是一件非常简单的事情。只需遵循下面的代码即可
获取为_admin
为null
的用户
$users=DB::table('users')->whereIsNull('is_admin')->get();
检查是否提交任何筛选器的值
if($request->filled('name\u of_filter\u input')){//code在这里}
因此,筛选记录的查询将如下所示
$query = DB::table('leads')->query();
$query->leftJoin('users', 'leads.vendor_id', '=', 'users.id');
$query->select('leads.*', 'users.name');
if($request->filled('vendor_id')) {
$query->where('vendor_id', $request->input('vendor_id'));
}
if($request->filled('customer_email')) {
$query->where('customer_email', $request->input('customer_email'));
}
if($request->filled('lead_status')) {
$query->orWhere('lead_status', $request->input('lead_status'));
}
if($request->filled('start_date') && $request->filled('end_date')) {
$query->whereBetween(DB::raw('date(leads.created_at)'), [$request->input('start_date'), $request->input('end_date')]);
}
$leads = $query->orderBy('leads.id', 'DESC')->get();
此外,如果query()
似乎是未定义的函数,则可以用相应的模型类替换DB::table('table_name')
语法
使用date()
函数包装leads.created_at
,如果created_at列的类型为timestamp
使用laravel作用域而不是where条件,则确保日期过滤器的日期为yyyyy-mm-dd
格式:或者您不想使用“或where”?或者您需要“和where”(常规,其中)看起来你正在尝试做时所做的事情
谢谢@lagbox的建议。我更新了我的answer@MrPerfect先生,谢谢您的回答,但我仍然有相同的问题……如果我选择了一个供应商名称,并拒绝潜在客户,则会给出一个接受潜在客户。请使用dump确保您的$status变量值,因为查询返回潜在客户时基于t他状态值Ankit先生,谢谢你的回答,现在我收到这个消息调用未定义的方法illumb\Database\Query\Builder::Query()我如何解决这个问题???????是的,但它不起作用,先生…我返回$leads,它不显示任何值justdd($leads)
检查它有什么。是的,但它是空白的。如果数据存在,请检查您的数据库中的特定筛选器。最后将get()
替换为toSql()
,以获取原始sql,然后在您的phpmyadmin或任何类似工具中运行它。