|
...
|
...
|
@@ -60,7 +60,7 @@ class Base extends Model |
|
|
|
public function read($condition,$files = ['*'])
|
|
|
|
{
|
|
|
|
$query = $this->formatQuery($condition);
|
|
|
|
$info = $query->select($files)->where($condition)->first();
|
|
|
|
$info = $query->select($files)->first();
|
|
|
|
if (empty($info)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
...
|
...
|
@@ -103,96 +103,58 @@ class Base extends Model |
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public function formatQuery($map,$val = ''){
|
|
|
|
/**
|
|
|
|
* @param $map = ['$k'=>['like',$v],$k1]
|
|
|
|
* @param $val
|
|
|
|
* @name
|
|
|
|
* @return Base
|
|
|
|
* @author :liyuhang
|
|
|
|
* @method
|
|
|
|
*/
|
|
|
|
public function formatQuery($map = []){
|
|
|
|
$query = $this;
|
|
|
|
$query->where(function ($query) use ($map,$val){
|
|
|
|
//拼接数据
|
|
|
|
if(is_array($map)){
|
|
|
|
foreach ($map as $v){
|
|
|
|
switch ($v){
|
|
|
|
case 'like':
|
|
|
|
// like查询 ['name|title', 'like', '%a%']
|
|
|
|
if (strpos($v[0], '|') !== false) {
|
|
|
|
$query->where(function ($query) use ($v) {
|
|
|
|
$item = explode('|', $v[0]);
|
|
|
|
foreach ($item as $vo) {
|
|
|
|
$query->orWhere($vo, $v[1], $v[2]);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
$query->where($v[0], $v[1], $v[2]);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 'in':
|
|
|
|
// in查询 ['id', 'in', [1,2,3]]
|
|
|
|
if (!is_array($v[2])) {
|
|
|
|
$v[2] = explode(',', $v[2]);
|
|
|
|
}
|
|
|
|
$query->whereIn($v[0], $v[2]);
|
|
|
|
break;
|
|
|
|
case 'not in':
|
|
|
|
// not in查询 ['id', 'not in', [1,2,3]]
|
|
|
|
if (!is_array($v[2])) {
|
|
|
|
$v[2] = explode(',', $v[2]);
|
|
|
|
}
|
|
|
|
$query->whereNotIn($v[0], $v[2]);
|
|
|
|
break;
|
|
|
|
case 'between':
|
|
|
|
// between查询 ['created_at', 'between', ['xxx', 'xxx]]
|
|
|
|
if (!is_array($v[2])) {
|
|
|
|
$v[2] = explode(',', $v[2]);
|
|
|
|
}
|
|
|
|
$query->whereBetween($v[0], $v[2]);
|
|
|
|
break;
|
|
|
|
case 'not between':
|
|
|
|
// not between查询 ['created_at', 'not between', ['xxx', 'xxx]]
|
|
|
|
if (!is_array($v[2])) {
|
|
|
|
$v[2] = explode(',', $v[2]);
|
|
|
|
}
|
|
|
|
$query->whereNotBetween($v[0], $v[2]);
|
|
|
|
break;
|
|
|
|
case 'null':
|
|
|
|
// null查询 ['deleted_at', 'null']
|
|
|
|
$query->whereNull($v[0]);
|
|
|
|
break;
|
|
|
|
case "not null":
|
|
|
|
// not null查询 ['deleted_at', 'not null']
|
|
|
|
$query->whereNotNull($v[0]);
|
|
|
|
break;
|
|
|
|
case "or":
|
|
|
|
// or查询 [[['status'=>1],['status'=>2]], 'or'];
|
|
|
|
//格式:or (status=1 and status=2)
|
|
|
|
$where = $v[0];
|
|
|
|
$query->orWhere(function ($query) use ($where) {
|
|
|
|
// 递归解析查询条件
|
|
|
|
$this->formatQuery($where, $query);
|
|
|
|
});
|
|
|
|
break;
|
|
|
|
case 'xor':
|
|
|
|
// xor查询 [[['status'=>1],['status'=>2]], 'xor'];
|
|
|
|
// 格式:and (status=1 or status=2)
|
|
|
|
$where = $v[0];
|
|
|
|
$query->where(function ($query) use ($where) {
|
|
|
|
foreach ($where as $w) {
|
|
|
|
$query->orWhere(function ($query) use ($w) {
|
|
|
|
// 递归解析查询条件
|
|
|
|
$this->formatQuery([$w], $query);
|
|
|
|
$query->where(function ($query) use ($map){
|
|
|
|
foreach ($map as $k => $v){
|
|
|
|
if(is_array($v)){
|
|
|
|
//拼接数据
|
|
|
|
foreach ($v as $k1 => $v1){
|
|
|
|
switch ($k1){
|
|
|
|
case 'like':
|
|
|
|
// like查询 ['name|title'=> ['like','%a%']]
|
|
|
|
if (strpos($k, '|') !== false) {
|
|
|
|
$query->where(function ($query) use ($k,$v1) {
|
|
|
|
$item = explode('|', $k);
|
|
|
|
foreach ($item as $vo) {
|
|
|
|
$query->orWhere($vo, $v1[0], $v1[1]);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
$query->where($k,$v1[0], $v1[1]);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
// 常规查询
|
|
|
|
if (count($v) == 2) {
|
|
|
|
$query->where($v[0], '=', $v[1]);
|
|
|
|
} else {
|
|
|
|
$query->where($v[0], $v[1], $v[2]);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case 'in':
|
|
|
|
// in查询 ['id'=>['in'=>[1,2,3]]]
|
|
|
|
$query->whereIn($k, $v1[1]);
|
|
|
|
break;
|
|
|
|
case 'no in':
|
|
|
|
// in查询 ['id'=>['not in'=>[1,2,3]]]
|
|
|
|
$query->whereNotIn($k, $v1[1]);
|
|
|
|
break;
|
|
|
|
case 'between':
|
|
|
|
// in查询 ['id'=>['between'=>[create1,create2]]]
|
|
|
|
$query->whereBetween($k, $v1[1]);
|
|
|
|
case 'not between':
|
|
|
|
// not between查询 ['created_at'=>['not between'=>['xxx', 'xxx]]]
|
|
|
|
$query->whereNotBetween($k, $v1[1]);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
$query->where($k,$k1,$v1[1]);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}else{
|
|
|
|
$query->where($map,$val);
|
|
|
|
$query->where($k,$v);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return $query;
|
...
|
...
|
|