搜索
系统检测到您的用户名不符合规范:

自动生成 where 子句

浏览:930 发布日期:2021年11月06日 分类:技术分享 关键字:
在开发中发现之前的同事使用了大量的if (!empty($this->req['seacherVal'])) {
$where[] = ['realname|username|phone', 'like', '%'.$this->req['seacherVal'].'%'];
}
来生成 where 子句,所以想了想写了一个方法来防止这种大量的重复判断
现在使用$data = [
"seacherVal" => "like,realname|username|phone",
"shopid" =>"idshop"
];
$where = buildWhere($data,$this->req);
就可以生成 where 子句,方法代码如下/**
* 根据传入得到 $data(格式详见参数介绍) 返回合适的 $where
* @param array $data 数据
* 示例 ["userid"=>"in,iduser","chanpinid"=>"idchanpin","in,test","test1"]
* 1.传入关联数组 键名是需要在 Request 中检索的字段。
* (1)如果键值使用 "," 隔开,逗号(英文)之前是 运算符 逗号(英文)之后是在数据库中被搜索的$request索引
* (2)如果键值没有使用 "," 隔开,默认使用 "=" 当作运算符,键值作为在数据库中被搜索的$request索引
* 2.传入 索引数组
* (1)如果键值使用 "," 隔开,逗号(英文)之前是 运算符 逗号(英文)之后的字符串 既是在 Request 中检索的字段 也是在数据库中被搜索的$request索引
* (2)如果键值没有使用 "," 隔开,默认使用 "=" 当作运算符,键值 既是在 Request 中检索的字段 也是在数据库中被搜索的$request索引
* @param Request $request
* @return array
*/
public function buildWhere($data,$request) {
$where = [];
//将 $data 键值对 依次放入闭包处理
array_walk($data,function ($value,$key) use($request,&$where) {
if(strstr($value,",")) {
//如果键值里有 逗号(英文)
$param = explode(",",$value);
}else {
//如果键值里没有 逗号(英文)
$param = ["=",$value];
}
if(is_numeric($key)) {
//如果传入的是索引数组,将值赋给键,键将用于在 $request 中检索
$key = $param[1];
}
if(!empty($request[$key])) {
//如果 $request 中存在 $key
if("like" == $param[0]) {
//如果运算符是 like 则要给 $request[$key] (将在被数据库中搜索的字段)加上通配符
$where[] = [$param[1],$param[0],"%".$request[$key]."%"];
}else {
$where[] = [$param[1],$param[0],$request[$key]];
}
}
});
return $where;
}
最佳答案
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
w_c_y_929
积分:222 等级:LV1
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /