• 售前

  • 售后

热门帖子
入门百科

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

[复制链接]
123457462 显示全部楼层 发表于 2021-10-25 19:37:27 |阅读模式 打印 上一主题 下一主题
本文实例报告了Laravel5中实现模糊匹配加多条件查询功能的方法。分享给大家供大家参考,具体如下:
方法1. ORM模式
  1. public function ReportAccurate($data)
  2. {
  3. if(is_array($data))
  4. {
  5.    $where = $this->whereAll($data);
  6.    return $where;
  7. }
  8. else
  9. {
  10.    return false;
  11. }
  12. }
  13. /*多条件模糊*/
  14. public function whereAll($data)
  15. {
  16.   $query = new ReportMainpage();
  17.   $results = $query->where(function ($query) use ($data) {
  18.     $data['report_first_received_date'] && $query->where('report_first_received_date', 'like', '%' . $data['report_first_received_date'] . '%');
  19.     $data['report_drug_safety_date'] && $query->where('report_drug_safety_date', 'like', '%' . $data['report_drug_safety_date'] . '%');
  20.     $data['aecountry_id'] && $query->where('aecountry_id', $data['aecountry_id']);
  21.     $data['received_fromid_id'] && $query->where('received_fromid_id', $data['received_fromid_id']);
  22.     $data['research_id'] && $query->where('research_id', 'like', '%' . $data['research_id'] . '%');
  23.     $data['center_number'] && $query->where('center_number', 'like', '%' . $data['center_number'] . '%');
  24.   })->get();
  25.   return $results;
  26. }
复制代码
上面的$data为前端传过来的数组 利用封装拼接进行模糊或者准确的多条件搜素
欠好的地方 代码不坚固 不利于维护
方法2. 大神封装法 利用到的知识是Repository 仓库
  1. $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'];
  2. /*查询的字段*/
  3. $searchFields = [
  4.   'report_identify' => 'like',
  5.   'drug_name' => 'like',
  6.   'event_term' => 'like',
  7.   'organize_role_id' => '=',
  8.   'case_causality' => '=',
  9.   'report_type' => '=',
  10.   'task_user_id' => '=',
  11.   'status' => '=',
  12. ];
  13. /*获取查询条件*/
  14. $where = $this->searchArray($searchFields);
  15. /*获取数据*/
  16. $this->reportTaskRepo->pushCriteria(new OrderBySortCriteria('asc', 'task_countdown'));
  17. $data = $this->reportTaskRepo->findWhere($where, $fields);
  18. //在Trait里封装
  19. /**
  20. * 获取请求中的参数的值
  21. * @param array $fields [description]
  22. * @return [type]     [description]
  23. */
  24. public function searchArray($fields=[])
  25. {
  26.   $results = [];
  27.   if (is_array($fields)) {
  28.    foreach($fields as $field => $operator) {
  29.      if(request()->has($field) && $value = $this->checkParam($field, '', false)) {
  30.       $results[$field] = [$field, $operator, "%{$value}%"];
  31.      }
  32.    }
  33.   }
  34.   return $results;
  35. }
复制代码
更多关于Laravel相干内容感爱好的读者可检察本站专题:《Laravel框架入门与进阶教程》、《php良好开发框架总结》、《php面向对象步伐计划入门教程》、《php+mysql数据库操纵入门教程》及《php常见数据库操纵技巧汇总》
盼望本文所述对大家基于Laravel框架的PHP步伐计划有所资助。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作