作者 liyuhang

gx

@@ -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;