正在显示
1 个修改的文件
包含
47 行增加
和
85 行删除
| @@ -60,7 +60,7 @@ class Base extends Model | @@ -60,7 +60,7 @@ class Base extends Model | ||
| 60 | public function read($condition,$files = ['*']) | 60 | public function read($condition,$files = ['*']) |
| 61 | { | 61 | { |
| 62 | $query = $this->formatQuery($condition); | 62 | $query = $this->formatQuery($condition); |
| 63 | - $info = $query->select($files)->where($condition)->first(); | 63 | + $info = $query->select($files)->first(); |
| 64 | if (empty($info)) { | 64 | if (empty($info)) { |
| 65 | return false; | 65 | return false; |
| 66 | } | 66 | } |
| @@ -103,96 +103,58 @@ class Base extends Model | @@ -103,96 +103,58 @@ class Base extends Model | ||
| 103 | } | 103 | } |
| 104 | 104 | ||
| 105 | 105 | ||
| 106 | - public function formatQuery($map,$val = ''){ | 106 | + /** |
| 107 | + * @param $map = ['$k'=>['like',$v],$k1] | ||
| 108 | + * @param $val | ||
| 109 | + * @name | ||
| 110 | + * @return Base | ||
| 111 | + * @author :liyuhang | ||
| 112 | + * @method | ||
| 113 | + */ | ||
| 114 | + public function formatQuery($map = []){ | ||
| 107 | $query = $this; | 115 | $query = $this; |
| 108 | - $query->where(function ($query) use ($map,$val){ | ||
| 109 | - //拼接数据 | ||
| 110 | - if(is_array($map)){ | ||
| 111 | - foreach ($map as $v){ | ||
| 112 | - switch ($v){ | ||
| 113 | - case 'like': | ||
| 114 | - // like查询 ['name|title', 'like', '%a%'] | ||
| 115 | - if (strpos($v[0], '|') !== false) { | ||
| 116 | - $query->where(function ($query) use ($v) { | ||
| 117 | - $item = explode('|', $v[0]); | ||
| 118 | - foreach ($item as $vo) { | ||
| 119 | - $query->orWhere($vo, $v[1], $v[2]); | ||
| 120 | - } | ||
| 121 | - }); | ||
| 122 | - } else { | ||
| 123 | - $query->where($v[0], $v[1], $v[2]); | ||
| 124 | - } | ||
| 125 | - break; | ||
| 126 | - case 'in': | ||
| 127 | - // in查询 ['id', 'in', [1,2,3]] | ||
| 128 | - if (!is_array($v[2])) { | ||
| 129 | - $v[2] = explode(',', $v[2]); | ||
| 130 | - } | ||
| 131 | - $query->whereIn($v[0], $v[2]); | ||
| 132 | - break; | ||
| 133 | - case 'not in': | ||
| 134 | - // not in查询 ['id', 'not in', [1,2,3]] | ||
| 135 | - if (!is_array($v[2])) { | ||
| 136 | - $v[2] = explode(',', $v[2]); | ||
| 137 | - } | ||
| 138 | - $query->whereNotIn($v[0], $v[2]); | ||
| 139 | - break; | ||
| 140 | - case 'between': | ||
| 141 | - // between查询 ['created_at', 'between', ['xxx', 'xxx]] | ||
| 142 | - if (!is_array($v[2])) { | ||
| 143 | - $v[2] = explode(',', $v[2]); | ||
| 144 | - } | ||
| 145 | - $query->whereBetween($v[0], $v[2]); | ||
| 146 | - break; | ||
| 147 | - case 'not between': | ||
| 148 | - // not between查询 ['created_at', 'not between', ['xxx', 'xxx]] | ||
| 149 | - if (!is_array($v[2])) { | ||
| 150 | - $v[2] = explode(',', $v[2]); | ||
| 151 | - } | ||
| 152 | - $query->whereNotBetween($v[0], $v[2]); | ||
| 153 | - break; | ||
| 154 | - case 'null': | ||
| 155 | - // null查询 ['deleted_at', 'null'] | ||
| 156 | - $query->whereNull($v[0]); | ||
| 157 | - break; | ||
| 158 | - case "not null": | ||
| 159 | - // not null查询 ['deleted_at', 'not null'] | ||
| 160 | - $query->whereNotNull($v[0]); | ||
| 161 | - break; | ||
| 162 | - case "or": | ||
| 163 | - // or查询 [[['status'=>1],['status'=>2]], 'or']; | ||
| 164 | - //格式:or (status=1 and status=2) | ||
| 165 | - $where = $v[0]; | ||
| 166 | - $query->orWhere(function ($query) use ($where) { | ||
| 167 | - // 递归解析查询条件 | ||
| 168 | - $this->formatQuery($where, $query); | ||
| 169 | - }); | ||
| 170 | - break; | ||
| 171 | - case 'xor': | ||
| 172 | - // xor查询 [[['status'=>1],['status'=>2]], 'xor']; | ||
| 173 | - // 格式:and (status=1 or status=2) | ||
| 174 | - $where = $v[0]; | ||
| 175 | - $query->where(function ($query) use ($where) { | ||
| 176 | - foreach ($where as $w) { | ||
| 177 | - $query->orWhere(function ($query) use ($w) { | ||
| 178 | - // 递归解析查询条件 | ||
| 179 | - $this->formatQuery([$w], $query); | 116 | + $query->where(function ($query) use ($map){ |
| 117 | + foreach ($map as $k => $v){ | ||
| 118 | + if(is_array($v)){ | ||
| 119 | + //拼接数据 | ||
| 120 | + foreach ($v as $k1 => $v1){ | ||
| 121 | + switch ($k1){ | ||
| 122 | + case 'like': | ||
| 123 | + // like查询 ['name|title'=> ['like','%a%']] | ||
| 124 | + if (strpos($k, '|') !== false) { | ||
| 125 | + $query->where(function ($query) use ($k,$v1) { | ||
| 126 | + $item = explode('|', $k); | ||
| 127 | + foreach ($item as $vo) { | ||
| 128 | + $query->orWhere($vo, $v1[0], $v1[1]); | ||
| 129 | + } | ||
| 180 | }); | 130 | }); |
| 131 | + } else { | ||
| 132 | + $query->where($k,$v1[0], $v1[1]); | ||
| 181 | } | 133 | } |
| 182 | - }); | ||
| 183 | - break; | ||
| 184 | - default: | ||
| 185 | - // 常规查询 | ||
| 186 | - if (count($v) == 2) { | ||
| 187 | - $query->where($v[0], '=', $v[1]); | ||
| 188 | - } else { | ||
| 189 | - $query->where($v[0], $v[1], $v[2]); | ||
| 190 | - } | ||
| 191 | - break; | 134 | + break; |
| 135 | + case 'in': | ||
| 136 | + // in查询 ['id'=>['in'=>[1,2,3]]] | ||
| 137 | + $query->whereIn($k, $v1[1]); | ||
| 138 | + break; | ||
| 139 | + case 'no in': | ||
| 140 | + // in查询 ['id'=>['not in'=>[1,2,3]]] | ||
| 141 | + $query->whereNotIn($k, $v1[1]); | ||
| 142 | + break; | ||
| 143 | + case 'between': | ||
| 144 | + // in查询 ['id'=>['between'=>[create1,create2]]] | ||
| 145 | + $query->whereBetween($k, $v1[1]); | ||
| 146 | + case 'not between': | ||
| 147 | + // not between查询 ['created_at'=>['not between'=>['xxx', 'xxx]]] | ||
| 148 | + $query->whereNotBetween($k, $v1[1]); | ||
| 149 | + break; | ||
| 150 | + default: | ||
| 151 | + $query->where($k,$k1,$v1[1]); | ||
| 152 | + break; | ||
| 192 | } | 153 | } |
| 193 | } | 154 | } |
| 194 | }else{ | 155 | }else{ |
| 195 | - $query->where($map,$val); | 156 | + $query->where($k,$v); |
| 157 | + } | ||
| 196 | } | 158 | } |
| 197 | }); | 159 | }); |
| 198 | return $query; | 160 | return $query; |
-
请 注册 或 登录 后发表评论