Laravel5中实现模糊匹配加多条件查询功能的方法

2018-09-07 14:14

阅读:280

  本文实例讲述了Laravel5中实现模糊匹配加多条件查询功能的方法。分享给大家供大家参考,具体如下:

  方法1. ORM模式

   public function ReportAccurate($data) { if(is_array($data)) { $where = $this->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, like, % . $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, like, % . $data[research_id] . %); $data[center_number] && $query->where(center_number, like, % . $data[center_number] . %); })->get(); return $results; }

  上面的$data为前端传过来的数组 利用封装拼接进行模糊或者精确的多条件搜素

  不好的地方 代码不健壮 不利于维护

  方法2. 大神封装法 利用到的知识是Repository 仓库

   $fields = [id, report_id, report_identify, report_first_received_date, drug_name, first_event_term, case_serious, standard_of_seriousness, case_causality, received_from_id, task_user_name, organize_role_name, task_countdown, report_countdown]; /*查询的字段*/ $searchFields = [ report_identify => 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相关内容感兴趣的读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

  希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。


评论


亲,登录后才可以留言!