这个源码是看不大懂怎么写模糊查询的条件
// where子单元分析
protected function parseWhereItem($field, $val)
{
$key = $field ? $this->parseKey($field) : '';
// 查询规则和条件
if (!is_array($val)) {
$val = ['=', $val];
}
list($exp, $value) = $val;
// 对一个字段使用多个查询条件
if (is_array($exp)) {
foreach ($val as $item) {
$str[] = $this->parseWhereItem($key, $item);
}
return $str;
}
// 检测操作符
if (!in_array($exp, $this->exp)) {
$exp = strtolower($exp);
if (isset($this->exp[$exp])) {
$exp = $this->exp[$exp];
} else {
throw new Exception('where express error:' . $exp);
}
}
$query = [];
if ('=' == $exp) {
// 普通查询
$query[$key] = $this->parseValue($value, $key);
} elseif (in_array($exp, ['neq', 'ne', 'gt', 'egt', 'gte', 'lt', 'lte', 'elt', 'mod'])) {
// 比较运算
$k = '$' . $exp;
$query[$key] = [$k => $this->parseValue($value, $key)];
} elseif ('all' == $exp) {
// 满足所有指定条件
$query[$key] = ['$all', $this->parseValue($value, $key)];
} elseif ('between' == $exp) {
// 区间查询
$value = is_array($value) ? $value : explode(',', $value);
$query[$key] = ['$gte' => $value[0], '$lte' => $value[1]];
} elseif ('not between' == $exp) {
// 范围查询
$value = is_array($value) ? $value : explode(',', $value);
$query[$key] = ['$lt' => $value[0], '$gt' => $value[1]];
} elseif ('exists' == $exp) {
// 字段是否存在
$query[$key] = ['$exists' => (bool) $value];
} elseif ('type' == $exp) {
// 类型查询
$query[$key] = ['$type' => intval($value)];
} elseif ('exp' == $exp) {
// 表达式查询
$query['$where'] = new Javascript($value);
} elseif ('like' == $exp) {
// 模糊查询 采用正则方式
$query[$key] = new Regex("/" . $value . "/");
} elseif (in_array($exp, ['nin', 'in'])) {
// IN 查询
$value = is_array($value) ? $value : explode(',', $value);
$query[$key] = ['$' . $exp, $value];
} elseif ('regex' == $exp) {
$query[$key] = new Regex($value);
} elseif ('< time' == $exp) {
$query[$key] = ['$lt', $this->parseDateTime($value, $field)];
} elseif ('> time' == $exp) {
$query[$key] = ['$gt', $this->parseDateTime($value, $field)];
} elseif ('between time' == $exp) {
// 区间查询
$value = is_array($value) ? $value : explode(',', $value);
$query[$key] = ['$gte' => $this->parseDateTime($value[0], $field), '$lte' => $this->parseDateTime($value[1], $field)];
} elseif ('not between time' == $exp) {
// 范围查询
$value = is_array($value) ? $value : explode(',', $value);
$query[$key] = ['$lt' => $this->parseDateTime($value[0], $field), '$gt' => $this->parseDateTime($value[1], $field)];
} else {
// 普通查询
$query[$key] = $this->parseValue($value, $key);
}
return $query;
}查询表达式错误 :like
return $str;
}
// 检测操作符
if (!in_array($exp, $this->exp)) {
$exp = strtolower($exp);
if (isset($this->exp[$exp])) {
$exp = $this->exp[$exp];
} else {
throw new Exception('where express error:' . $exp);
}
}
$query = [];
if ('=' == $exp) {
// 普通查询
$query[$key] = $this->parseValue($value, $key);
} elseif (in_array($exp, ['neq', 'ne', 'gt', 'egt', 'gte', 'lt', 'lte', 'elt', 'mod'])) {
// 比较运算 最佳答案