mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-01 12:42:48 +08:00
Merge branch 'master' of https://git.topthink.com/topteam/framework
This commit is contained in:
@@ -995,7 +995,7 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
|
||||
}
|
||||
|
||||
// 模型更新
|
||||
$result = $this->db()->where($where)->update($data);
|
||||
$result = $this->getQuery()->where($where)->update($data);
|
||||
|
||||
// 关联更新
|
||||
if (isset($relation)) {
|
||||
@@ -1022,11 +1022,11 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
|
||||
return false;
|
||||
}
|
||||
|
||||
$result = $this->db()->insert($this->data);
|
||||
$result = $this->getQuery()->insert($this->data);
|
||||
|
||||
// 获取自动增长主键
|
||||
if ($result && is_string($pk) && (!isset($this->data[$pk]) || '' == $this->data[$pk])) {
|
||||
$insertId = $this->db()->getLastInsID($sequence);
|
||||
$insertId = $this->getQuery()->getLastInsID($sequence);
|
||||
if ($insertId) {
|
||||
$this->data[$pk] = $insertId;
|
||||
}
|
||||
@@ -1114,7 +1114,7 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
|
||||
}
|
||||
|
||||
$result = [];
|
||||
$db = $this->db();
|
||||
$db = $this->getQuery();
|
||||
$db->startTrans();
|
||||
try {
|
||||
$pk = $this->getPk();
|
||||
@@ -1228,7 +1228,7 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
|
||||
}
|
||||
|
||||
// 删除当前模型数据
|
||||
$result = $this->db()->where($where)->delete();
|
||||
$result = $this->getQuery()->where($where)->delete();
|
||||
|
||||
// 关联删除
|
||||
if (!empty($this->relationWrite)) {
|
||||
|
||||
@@ -273,6 +273,23 @@ abstract class Paginator implements ArrayAccess, Countable, IteratorAggregate, J
|
||||
return $this->items->isEmpty();
|
||||
}
|
||||
|
||||
/**
|
||||
* 给每个元素执行个回调
|
||||
*
|
||||
* @param callable $callback
|
||||
* @return $this
|
||||
*/
|
||||
public function each(callable $callback)
|
||||
{
|
||||
foreach ($this->items as $key => $item) {
|
||||
if ($callback($item, $key) === false) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve an external iterator
|
||||
* @return Traversable An instance of an object implementing <b>Iterator</b> or
|
||||
|
||||
@@ -1034,7 +1034,7 @@ class Request
|
||||
$filter = [];
|
||||
} else {
|
||||
$filter = $filter ?: $this->filter;
|
||||
if (is_string($filter)) {
|
||||
if (is_string($filter) && false === strpos($filter, '/')) {
|
||||
$filter = explode(',', $filter);
|
||||
} else {
|
||||
$filter = (array) $filter;
|
||||
@@ -1060,7 +1060,7 @@ class Request
|
||||
// 调用函数或者方法过滤
|
||||
$value = call_user_func($filter, $value);
|
||||
} elseif (is_scalar($value)) {
|
||||
if (strpos($filter, '/')) {
|
||||
if (false !== strpos($filter, '/')) {
|
||||
// 正则过滤
|
||||
if (!preg_match($filter, $value)) {
|
||||
// 匹配不成功返回默认值
|
||||
|
||||
@@ -924,7 +924,7 @@ class Route
|
||||
} else {
|
||||
$str = $key;
|
||||
}
|
||||
if (is_string($str) && $str && 0 !== strpos(str_replace('|', '/', $url), $str)) {
|
||||
if (is_string($str) && $str && 0 !== stripos(str_replace('|', '/', $url), $str)) {
|
||||
continue;
|
||||
}
|
||||
self::setOption($option);
|
||||
|
||||
@@ -780,11 +780,31 @@ abstract class Connection
|
||||
/**
|
||||
* 是否断线
|
||||
* @access protected
|
||||
* @param \PDOException $e 异常
|
||||
* @param \PDOException $e 异常对象
|
||||
* @return bool
|
||||
*/
|
||||
protected function isBreak($e)
|
||||
{
|
||||
$info = [
|
||||
'server has gone away',
|
||||
'no connection to the server',
|
||||
'Lost connection',
|
||||
'is dead or not enabled',
|
||||
'Error while sending',
|
||||
'decryption failed or bad record mac',
|
||||
'server closed the connection unexpectedly',
|
||||
'SSL connection has been closed unexpectedly',
|
||||
'Error writing data to the connection',
|
||||
'Resource deadlock avoided',
|
||||
];
|
||||
|
||||
$error = $e->getMessage();
|
||||
|
||||
foreach ($info as $msg) {
|
||||
if (false !== stripos($error, $msg)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -401,7 +401,7 @@ class Query
|
||||
if (empty($this->options['table'])) {
|
||||
$this->options['table'] = $this->getTable();
|
||||
}
|
||||
$key = is_string($cache['key']) ? $cache['key'] : md5($field . serialize($this->options));
|
||||
$key = is_string($cache['key']) ? $cache['key'] : md5($field . serialize($this->options) . serialize($this->bind));
|
||||
$result = Cache::get($key);
|
||||
}
|
||||
if (false === $result) {
|
||||
@@ -444,7 +444,7 @@ class Query
|
||||
if (empty($this->options['table'])) {
|
||||
$this->options['table'] = $this->getTable();
|
||||
}
|
||||
$guid = is_string($cache['key']) ? $cache['key'] : md5($field . serialize($this->options));
|
||||
$guid = is_string($cache['key']) ? $cache['key'] : md5($field . serialize($this->options) . serialize($this->bind));
|
||||
$result = Cache::get($guid);
|
||||
}
|
||||
if (false === $result) {
|
||||
@@ -596,7 +596,7 @@ class Query
|
||||
}
|
||||
if ($lazyTime > 0) {
|
||||
// 延迟写入
|
||||
$guid = md5($this->getTable() . '_' . $field . '_' . serialize($condition));
|
||||
$guid = md5($this->getTable() . '_' . $field . '_' . serialize($condition) . serialize($this->bind));
|
||||
$step = $this->lazyWrite('inc', $guid, $step, $lazyTime);
|
||||
if (false === $step) {
|
||||
// 清空查询条件
|
||||
@@ -625,7 +625,7 @@ class Query
|
||||
}
|
||||
if ($lazyTime > 0) {
|
||||
// 延迟写入
|
||||
$guid = md5($this->getTable() . '_' . $field . '_' . serialize($condition));
|
||||
$guid = md5($this->getTable() . '_' . $field . '_' . serialize($condition) . serialize($this->bind));
|
||||
$step = $this->lazyWrite('dec', $guid, $step, $lazyTime);
|
||||
if (false === $step) {
|
||||
// 清空查询条件
|
||||
@@ -1902,6 +1902,9 @@ class Query
|
||||
$closure = $relation;
|
||||
$relation = $key;
|
||||
$with[$key] = $key;
|
||||
} elseif (is_array($relation)) {
|
||||
$subRelation = $relation;
|
||||
$relation = $key;
|
||||
} elseif (is_string($relation) && strpos($relation, '.')) {
|
||||
$with[$key] = $relation;
|
||||
list($relation, $subRelation) = explode('.', $relation, 2);
|
||||
@@ -2205,7 +2208,7 @@ class Query
|
||||
$options['where']['AND'] = $where;
|
||||
}
|
||||
} elseif (!isset($key) && is_string($pk) && isset($options['where']['AND'][$pk])) {
|
||||
$key = $this->getCacheKey($options['where']['AND'][$pk], $options);
|
||||
$key = $this->getCacheKey($options['where']['AND'][$pk], $options, $this->bind);
|
||||
}
|
||||
|
||||
// 生成UPDATE SQL语句
|
||||
@@ -2293,7 +2296,7 @@ class Query
|
||||
// 判断查询缓存
|
||||
$cache = $options['cache'];
|
||||
unset($options['cache']);
|
||||
$key = is_string($cache['key']) ? $cache['key'] : md5(serialize($options));
|
||||
$key = is_string($cache['key']) ? $cache['key'] : md5(serialize($options) . serialize($this->bind));
|
||||
$resultSet = Cache::get($key);
|
||||
}
|
||||
if (!$resultSet) {
|
||||
@@ -2385,8 +2388,9 @@ class Query
|
||||
* @access public
|
||||
* @param mixed $value 缓存数据
|
||||
* @param array $options 缓存参数
|
||||
* @param array $bind 绑定参数
|
||||
*/
|
||||
protected function getCacheKey($value, $options)
|
||||
protected function getCacheKey($value, $options, $bind = [])
|
||||
{
|
||||
if (is_scalar($value)) {
|
||||
$data = $value;
|
||||
@@ -2394,9 +2398,9 @@ class Query
|
||||
$data = $value[1];
|
||||
}
|
||||
if (isset($data)) {
|
||||
return 'think:' . $options['table'] . '|' . $data;
|
||||
return 'think:' . (is_array($options['table']) ? key($options['table']) : $options['table']) . '|' . $data;
|
||||
} else {
|
||||
return md5(serialize($options));
|
||||
return md5(serialize($options) . serialize($bind));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2424,7 +2428,7 @@ class Query
|
||||
// AR模式分析主键条件
|
||||
$this->parsePkWhere($data, $options);
|
||||
} elseif (!empty($options['cache']) && true === $options['cache']['key'] && is_string($pk) && isset($options['where']['AND'][$pk])) {
|
||||
$key = $this->getCacheKey($options['where']['AND'][$pk], $options);
|
||||
$key = $this->getCacheKey($options['where']['AND'][$pk], $options, $this->bind);
|
||||
}
|
||||
|
||||
$options['limit'] = 1;
|
||||
@@ -2437,7 +2441,7 @@ class Query
|
||||
} elseif (is_string($cache['key'])) {
|
||||
$key = $cache['key'];
|
||||
} elseif (!isset($key)) {
|
||||
$key = md5(serialize($options));
|
||||
$key = md5(serialize($options) . serialize($this->bind));
|
||||
}
|
||||
$result = Cache::get($key);
|
||||
}
|
||||
@@ -2648,7 +2652,7 @@ class Query
|
||||
// AR模式分析主键条件
|
||||
$this->parsePkWhere($data, $options);
|
||||
} elseif (!isset($key) && is_string($pk) && isset($options['where']['AND'][$pk])) {
|
||||
$key = $this->getCacheKey($options['where']['AND'][$pk], $options);
|
||||
$key = $this->getCacheKey($options['where']['AND'][$pk], $options, $this->bind);
|
||||
}
|
||||
|
||||
if (true !== $data && empty($options['where'])) {
|
||||
|
||||
@@ -130,17 +130,4 @@ class Mysql extends Connection
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否断线
|
||||
* @access protected
|
||||
* @param \PDOException $e 异常对象
|
||||
* @return bool
|
||||
*/
|
||||
protected function isBreak($e)
|
||||
{
|
||||
if (false !== stripos($e->getMessage(), 'server has gone away')) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title><?php echo lang('System Error'); ?></title>
|
||||
<title><?php echo \think\Lang::get('System Error'); ?></title>
|
||||
<meta name="robots" content="noindex,nofollow" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
|
||||
<style>
|
||||
|
||||
Reference in New Issue
Block a user