Laravel5中实现模糊匹配加多条件查询功能的方法
作者:勋彰 发布时间:2024-05-03 15:28:35
标签:Laravel5,模糊匹配,多条件查询
本文实例讲述了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框架的PHP程序设计有所帮助。
来源:https://blog.csdn.net/ltstud/article/details/79207341


猜你喜欢
- 这个问题非常非常重要,搞了一晚上都没解决好,但是真的很简单很简单, 如果你也 是用的numpy array, 如果你也想得到输出矩阵的全部内
- Mootools 1.2手风琴(Accordion)教程原文地址:30 Days of Mootools 1.2 Tutoria
- 1.下载PyQt官方网站:http://www.riverbankcomputing.com/software/pyqt/download5
- 一、写在前面我从未想过自己会写python系列的自动化文章,有些同学会问,那你现在为什么又开始写了?不止一个人找过我,问我可以写一些Pyth
- Python是一个非常实用、流行的解释型编程语言,其优势之一就是可以借助其交互的shell进行探索式地编程。你可以试着输入一些代码,然后马上
- 为某国税局开发一综合 * ,需要建立一个庞大的国税系统通讯录数据库,从各省、市到每名具体工作人员,项目较多,该如何设计各表呢?数据库的表设计
- 例如有这么一个查询语句:select * from server where ip in (....)同时一个存放ip 的列表 :['
- HTTP-REFERER这个变量已经越来越不可靠了,完全就是可以伪造出来的东东。 以下是伪造方法: ASP: dim http&n
- 本文实例讲述了PHP实现的XXTEA加密解密算法。分享给大家供大家参考,具体如下:<?php/** * Xxtea 加密实现类 */c
- 一、进程介绍进程:正在执行的程序,由程序、数据和进程控制块组成,是正在执行的程序,程序的一次执行过程,是资源调度的基本单位。程序:没有执行的
- 本文实例讲述了python实现从网络下载文件并获得文件大小及类型的方法。分享给大家供大家参考。具体实现方法如下:import urllib2
- 我就废话不多说了,大家还是直接看代码吧~package mainimport ( "net/http")func mai
- 为什么使用Python 假设我们有这么一项任务:简单测试局域网中的电脑是否连通.这些电脑的ip范围从19
- 1. 前言在执行一些 IO 密集型任务的时候,程序常常会因为等待 IO 而阻塞。比如在网络爬虫中,如果我们使用 requests 库来进行请
- 前言在Python中元组是一个相较于其他语言比较特别的一个内置序列类型。有些python入门教程把元组成为“不可变的列表”,这种说法是不完备
- 本文实例讲述了python使用分治法实现求解最大值的方法。分享给大家供大家参考。具体分析如下:题目:给定一个顺序表,编写一个求出其最大值和最
- 在python中常看到在定义函数是使用@func. 这就是装饰器, 装饰器是把一个函数作为参数的函数,常常用于扩展已有函数,即不改变当前函数
- 开通QQ邮箱POP3/SMTP服务登录QQ邮箱网址,进入设置选择账户tab页翻到最低下开启此服务获取qq邮箱授权码搭建node接口服务思路创
- 下面的例子演法了怎么样从协程里返回一个值:import asyncioasync def coroutine(): print(
- 一直都在网上抄别人写的电话,邮箱正则表达式,今天稍微有点闲情,把一直想自己写个这样的表达式的心愿给完成:/** * 邮箱地址正则表