更新tp内核
This commit is contained in:
@@ -39,11 +39,12 @@ use think\paginator\Collection as PaginatorCollection;
|
||||
*/
|
||||
abstract class Model implements \JsonSerializable, \ArrayAccess
|
||||
{
|
||||
|
||||
// 数据库对象池
|
||||
protected static $links = [];
|
||||
// 数据库配置
|
||||
protected $connection = [];
|
||||
// 数据库查询对象
|
||||
protected $query;
|
||||
// 当前模型名称
|
||||
protected $name;
|
||||
// 数据表名称
|
||||
@@ -147,7 +148,7 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
|
||||
$model = $this->class;
|
||||
if (!isset(self::$links[$model])) {
|
||||
// 设置当前模型 确保查询返回模型对象
|
||||
$query = Db::connect($this->connection)->model($model);
|
||||
$query = Db::connect($this->connection)->model($model, $this->query);
|
||||
|
||||
// 设置当前数据表和模型名
|
||||
if (!empty($this->table)) {
|
||||
@@ -666,6 +667,10 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
|
||||
if (!empty($where)) {
|
||||
$pk = $this->getPk();
|
||||
if (is_string($pk) && isset($data[$pk])) {
|
||||
if (!isset($where[$pk])) {
|
||||
unset($where);
|
||||
$where[$pk] = $data[$pk];
|
||||
}
|
||||
unset($data[$pk]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,6 +104,8 @@ abstract class Connection
|
||||
'sql_explain' => false,
|
||||
// Builder类
|
||||
'builder' => '',
|
||||
// Query类
|
||||
'query' => '\\think\\db\\Query',
|
||||
];
|
||||
|
||||
// PDO连接参数
|
||||
@@ -131,12 +133,14 @@ abstract class Connection
|
||||
* 创建指定模型的查询对象
|
||||
* @access public
|
||||
* @param string $model 模型类名称
|
||||
* @param string $queryClass 查询对象类名
|
||||
* @return Query
|
||||
*/
|
||||
public function model($model)
|
||||
public function model($model, $queryClass = '')
|
||||
{
|
||||
if (!isset($this->query[$model])) {
|
||||
$this->query[$model] = new Query($this, $model);
|
||||
$class = $queryClass ?: $this->config['query'];
|
||||
$this->query[$model] = new $class($this, $model);
|
||||
}
|
||||
return $this->query[$model];
|
||||
}
|
||||
@@ -151,7 +155,8 @@ abstract class Connection
|
||||
public function __call($method, $args)
|
||||
{
|
||||
if (!isset($this->query['database'])) {
|
||||
$this->query['database'] = new Query($this);
|
||||
$class = $this->config['query'];
|
||||
$this->query['database'] = new $class($this);
|
||||
}
|
||||
return call_user_func_array([$this->query['database'], $method], $args);
|
||||
}
|
||||
|
||||
@@ -1342,9 +1342,14 @@ class Query
|
||||
|
||||
list($guid) = explode(' ', $tableName);
|
||||
if (!isset(self::$info[$guid])) {
|
||||
if (!strpos($guid, '.')) {
|
||||
$schema = $this->getConfig('database') . '.' . $guid;
|
||||
} else {
|
||||
$schema = $guid;
|
||||
}
|
||||
// 读取缓存
|
||||
if (is_file(RUNTIME_PATH . 'schema/' . $guid . '.php')) {
|
||||
$info = include RUNTIME_PATH . 'schema/' . $guid . '.php';
|
||||
if (is_file(RUNTIME_PATH . 'schema/' . $schema . '.php')) {
|
||||
$info = include RUNTIME_PATH . 'schema/' . $schema . '.php';
|
||||
} else {
|
||||
$info = $this->connection->getFields($guid);
|
||||
}
|
||||
|
||||
@@ -233,16 +233,24 @@ class Merge extends Model
|
||||
if ($result) {
|
||||
$insertId = $db->getLastInsID($sequence);
|
||||
// 写入外键数据
|
||||
$pk = $this->getPk();
|
||||
if ($insertId) {
|
||||
if (is_string($pk)) {
|
||||
$this->data[$pk] = $insertId;
|
||||
}
|
||||
$this->data[$this->fk] = $insertId;
|
||||
}
|
||||
|
||||
// 写入附表数据
|
||||
$source = $this->data;
|
||||
if ($insertId && is_string($pk) && isset($source[$pk])) {
|
||||
unset($source[$pk]);
|
||||
}
|
||||
foreach (static::$relationModel as $key => $model) {
|
||||
$name = is_int($key) ? $model : $key;
|
||||
$table = is_int($key) ? $db->getTable($model) : $model;
|
||||
// 处理关联模型数据
|
||||
$data = $this->parseData($name, $this->data, true);
|
||||
$data = $this->parseData($name, $source, true);
|
||||
$query = clone $db;
|
||||
$query->table($table)->strict(false)->insert($data);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user