1、样式修复
2、内核升级
This commit is contained in:
@@ -306,7 +306,7 @@ abstract class Builder
|
||||
if (is_scalar($value) && array_key_exists($field, $binds) && !in_array($exp, ['EXP', 'NOT NULL', 'NULL', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN']) && strpos($exp, 'TIME') === false) {
|
||||
if (strpos($value, ':') !== 0 || !$this->query->isBind(substr($value, 1))) {
|
||||
if ($this->query->isBind($bindName)) {
|
||||
$bindName .= '_' . uniqid();
|
||||
$bindName .= '_' . str_replace('.', '_', uniqid('', true));
|
||||
}
|
||||
$this->query->bind($bindName, $value, $bindType);
|
||||
$value = ':' . $bindName;
|
||||
@@ -333,8 +333,13 @@ abstract class Builder
|
||||
$bind = [];
|
||||
$array = [];
|
||||
foreach ($value as $k => $v) {
|
||||
$bind[$bindName . '_in_' . $k] = [$v, $bindType];
|
||||
$array[] = ':' . $bindName . '_in_' . $k;
|
||||
if ($this->query->isBind($bindName . '_in_' . $k)) {
|
||||
$bindKey = $bindName . '_in_' . uniqid() . '_' . $k;
|
||||
} else {
|
||||
$bindKey = $bindName . '_in_' . $k;
|
||||
}
|
||||
$bind[$bindKey] = [$v, $bindType];
|
||||
$array[] = ':' . $bindKey;
|
||||
}
|
||||
$this->query->bind($bind);
|
||||
$zone = implode(',', $array);
|
||||
@@ -347,12 +352,19 @@ abstract class Builder
|
||||
// BETWEEN 查询
|
||||
$data = is_array($value) ? $value : explode(',', $value);
|
||||
if (array_key_exists($field, $binds)) {
|
||||
if ($this->query->isBind($bindName . '_between_1')) {
|
||||
$bindKey1 = $bindName . '_between_1' . uniqid();
|
||||
$bindKey2 = $bindName . '_between_2' . uniqid();
|
||||
} else {
|
||||
$bindKey1 = $bindName . '_between_1';
|
||||
$bindKey2 = $bindName . '_between_2';
|
||||
}
|
||||
$bind = [
|
||||
$bindName . '_between_1' => [$data[0], $bindType],
|
||||
$bindName . '_between_2' => [$data[1], $bindType],
|
||||
$bindKey1 => [$data[0], $bindType],
|
||||
$bindKey2 => [$data[1], $bindType],
|
||||
];
|
||||
$this->query->bind($bind);
|
||||
$between = ':' . $bindName . '_between_1' . ' AND :' . $bindName . '_between_2';
|
||||
$between = ':' . $bindKey1 . ' AND :' . $bindKey2;
|
||||
} else {
|
||||
$between = $this->parseValue($data[0], $field) . ' AND ' . $this->parseValue($data[1], $field);
|
||||
}
|
||||
@@ -410,7 +422,10 @@ abstract class Builder
|
||||
$info = $type[$key];
|
||||
}
|
||||
if (isset($info)) {
|
||||
$value = strtotime($value) ?: $value;
|
||||
if (is_numeric($value) && strtotime($value)) {
|
||||
$value = strtotime($value) ?: $value;
|
||||
}
|
||||
|
||||
if (preg_match('/(datetime|timestamp)/is', $info)) {
|
||||
// 日期及时间戳类型
|
||||
$value = date('Y-m-d H:i:s', $value);
|
||||
|
||||
@@ -421,8 +421,8 @@ abstract class Connection
|
||||
$type = is_array($val) ? $val[1] : PDO::PARAM_STR;
|
||||
if (PDO::PARAM_STR == $type) {
|
||||
$value = $this->quote($value);
|
||||
} elseif (PDO::PARAM_INT == $type && '' === $value) {
|
||||
$value = 0;
|
||||
} elseif (PDO::PARAM_INT == $type) {
|
||||
$value = (float) $value;
|
||||
}
|
||||
// 判断占位符
|
||||
$sql = is_numeric($key) ?
|
||||
|
||||
@@ -917,6 +917,9 @@ class Query
|
||||
if (is_array($field)) {
|
||||
// 数组批量查询
|
||||
$where = $field;
|
||||
foreach ($where as $k => $val) {
|
||||
$this->options['multi'][$k][] = $val;
|
||||
}
|
||||
} elseif ($field && is_string($field)) {
|
||||
// 字符串查询
|
||||
$where[$field] = ['null', ''];
|
||||
@@ -931,15 +934,32 @@ class Query
|
||||
$where[$field] = ['eq', $op];
|
||||
} else {
|
||||
$where[$field] = [$op, $condition];
|
||||
// 记录一个字段多次查询条件
|
||||
$this->options['multi'][$field][] = $where[$field];
|
||||
}
|
||||
if (!empty($where)) {
|
||||
if (!isset($this->options['where'][$logic])) {
|
||||
$this->options['where'][$logic] = [];
|
||||
}
|
||||
if (is_string($field) && $this->checkMultiField($field)) {
|
||||
$where[$field] = $this->options['multi'][$field];
|
||||
} elseif (is_array($field)) {
|
||||
foreach ($field as $key => $val) {
|
||||
if ($this->checkMultiField($key)) {
|
||||
$where[$key] = $this->options['multi'][$key];
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->options['where'][$logic] = array_merge($this->options['where'][$logic], $where);
|
||||
}
|
||||
}
|
||||
|
||||
// 检查是否存在一个字段多次查询条件
|
||||
private function checkMultiField($field)
|
||||
{
|
||||
return isset($this->options['multi'][$field]) && count($this->options['multi'][$field]) > 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 去除某个查询条件
|
||||
* @access public
|
||||
@@ -1416,9 +1436,10 @@ class Query
|
||||
}
|
||||
|
||||
list($guid) = explode(' ', $tableName);
|
||||
if (!isset(self::$info[$guid])) {
|
||||
$db = $this->getConfig('database');
|
||||
if (!isset(self::$info[$db . '.' . $guid])) {
|
||||
if (!strpos($guid, '.')) {
|
||||
$schema = $this->getConfig('database') . '.' . $guid;
|
||||
$schema = $db . '.' . $guid;
|
||||
} else {
|
||||
$schema = $guid;
|
||||
}
|
||||
@@ -1444,9 +1465,9 @@ class Query
|
||||
} else {
|
||||
$pk = null;
|
||||
}
|
||||
self::$info[$guid] = ['fields' => $fields, 'type' => $type, 'bind' => $bind, 'pk' => $pk];
|
||||
self::$info[$db . '.' . $guid] = ['fields' => $fields, 'type' => $type, 'bind' => $bind, 'pk' => $pk];
|
||||
}
|
||||
return $fetch ? self::$info[$guid][$fetch] : self::$info[$guid];
|
||||
return $fetch ? self::$info[$db . '.' . $guid][$fetch] : self::$info[$db . '.' . $guid];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2138,19 +2159,30 @@ class Query
|
||||
$column = $column ?: $this->getPk($table);
|
||||
$bind = $this->bind;
|
||||
$resultSet = $this->limit($count)->order($column, 'asc')->select();
|
||||
if (strpos($column, '.')) {
|
||||
list($alias, $key) = explode('.', $column);
|
||||
} else {
|
||||
$key = $column;
|
||||
}
|
||||
if ($resultSet instanceof Collection) {
|
||||
$resultSet = $resultSet->all();
|
||||
}
|
||||
|
||||
while (!empty($resultSet)) {
|
||||
if (false === call_user_func($callback, $resultSet)) {
|
||||
return false;
|
||||
}
|
||||
$end = end($resultSet);
|
||||
$lastId = is_array($end) ? $end[$column] : $end->$column;
|
||||
$lastId = is_array($end) ? $end[$key] : $end->$key;
|
||||
$resultSet = $this->options($options)
|
||||
->limit($count)
|
||||
->bind($bind)
|
||||
->where($column, '>', $lastId)
|
||||
->order($column, 'asc')
|
||||
->select();
|
||||
if ($resultSet instanceof Collection) {
|
||||
$resultSet = $resultSet->all();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user