From c1107d3a858bc2ce7829b6a9567ed48628598a9f Mon Sep 17 00:00:00 2001 From: thinkphp Date: Wed, 21 Dec 2016 11:09:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=81=9A=E5=90=88=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/think/model/Merge.php | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/library/think/model/Merge.php b/library/think/model/Merge.php index de8d9e1a..e9498595 100644 --- a/library/think/model/Merge.php +++ b/library/think/model/Merge.php @@ -12,6 +12,7 @@ namespace think\model; use think\Db; +use think\db\Query; use think\Model; class Merge extends Model @@ -174,6 +175,7 @@ class Merge extends Model $db = $this->db(); $db->startTrans(); + $pk = $this->getPk(); try { if ($this->isUpdate) { // 自动写入 @@ -187,19 +189,15 @@ class Merge extends Model $where = $this->updateWhere; } - if (!empty($where)) { - $pk = $this->getPk(); - - if (isset($this->mapFields[$pk])) { - $pk = $this->mapFields[$pk]; - } - if (isset($where[$pk])) { - unset($where[$pk]); - } - } - // 处理模型数据 $data = $this->parseData($this->name, $this->data); + if (is_string($pk) && isset($data[$pk])) { + if (!isset($where[$pk])) { + unset($where); + $where[$pk] = $data[$pk]; + } + unset($data[$pk]); + } // 写入主表数据 $result = $db->strict(false)->where($where)->update($data); @@ -209,7 +207,7 @@ class Merge extends Model $table = is_int($key) ? $db->getTable($model) : $model; // 处理关联模型数据 $data = $this->parseData($name, $this->data); - $query = clone $db; + $query = new Query; if ($query->table($table)->strict(false)->where($this->fk, $this->data[$this->getPk()])->update($data)) { $result = 1; } @@ -238,7 +236,6 @@ class Merge extends Model if ($result) { $insertId = $db->getLastInsID($sequence); // 写入外键数据 - $pk = $this->getPk(); if ($insertId) { if (is_string($pk)) { $this->data[$pk] = $insertId; @@ -259,7 +256,7 @@ class Merge extends Model $table = is_int($key) ? $db->getTable($model) : $model; // 处理关联模型数据 $data = $this->parseData($name, $source, true); - $query = clone $db; + $query = new Query; $query->table($table)->strict(false)->insert($data); } }