本文实例讲述了Laravel5中实现模糊匹配加多条件查询功能的方法。分享给大家供大家参考,具体如下:
方法1. ORM模式
whereAll($data);
return $where;
}
else
{
return false;
}
}
/*多条件模糊*/
public function whereAll($data)
{
$query = new ReportMainpage();
$results = $query->where(function ($query) use ($data) {
$data['report_first_received_date'] && $query->where('report_first_received_date','like','%' . $data['report_first_received_date'] . '%');
$data['report_drug_safety_date'] && $query->where('report_drug_safety_date','%' . $data['report_drug_safety_date'] . '%');
$data['aecountry_id'] && $query->where('aecountry_id',$data['aecountry_id']);
$data['received_fromid_id'] && $query->where('received_fromid_id',$data['received_fromid_id']);
$data['research_id'] && $query->where('research_id','%' . $data['research_id'] . '%');
$data['center_number'] && $query->where('center_number','%' . $data['center_number'] . '%');
})->get();
return $results;
}
上面的$data为前端传过来的数组 利用封装拼接进行模糊或者精确的多条件搜素
不好的地方 代码不健壮 不利于维护
方法2. 大神封装法 利用到的知识是Repository 仓库
'like','drug_name' => 'like','event_term' => 'like','organize_role_id' => '=','case_causality' => '=','report_type' => '=','task_user_id' => '=','status' => '=',];
/*获取查询条件*/
$where = $this->searchArray($searchFields);
/*获取数据*/
$this->reportTaskRepo->pushCriteria(new OrderBySortCriteria('asc','task_countdown'));
$data = $this->reportTaskRepo->findWhere($where,$fields);
//在Trait里封装
/**
* 获取请求中的参数的值
* @param array $fields [description]
* @return [type] [description]
*/
public function searchArray($fields=[])
{
$results = [];
if (is_array($fields)) {
foreach($fields as $field => $operator) {
if(request()->has($field) && $value = $this->checkParam($field,'',false)) {
$results[$field] = [$field,$operator,"%{$value}%"];
}
}
}
return $results;
}
更多关于Laravel相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》及《PHP常见数据库操作技巧汇总》
希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。
原文链接:https://www.f2er.com/laravel/16211.html