From ebfcbac863de681bee227b588bc94f09b5be2045 Mon Sep 17 00:00:00 2001 From: thinkphp Date: Tue, 17 Jan 2017 08:19:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9BModel=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/think/Model.php | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/library/think/Model.php b/library/think/Model.php index fbd19454..dc745b7f 100644 --- a/library/think/Model.php +++ b/library/think/Model.php @@ -1377,6 +1377,20 @@ abstract class Model implements \JsonSerializable, \ArrayAccess } } + /** + * 获取模型的默认外键名 + * @access public + * @param string $name 模型名 + * @return string + */ + protected function getForeignKey($name) + { + if (strpos($name, '\\')) { + $name = basename(str_replace('\\', '/', $model)); + } + return Loader::parseName($name) . '_id'; + } + /** * HAS ONE 关联定义 * @access public @@ -1392,7 +1406,7 @@ abstract class Model implements \JsonSerializable, \ArrayAccess // 记录当前关联信息 $model = $this->parseModel($model); $localKey = $localKey ?: $this->getPk(); - $foreignKey = $foreignKey ?: Loader::parseName($this->name) . '_id'; + $foreignKey = $foreignKey ?: $this->getForeignKey($this->name); return new HasOne($this, $model, $foreignKey, $localKey, $joinType); } @@ -1410,7 +1424,7 @@ abstract class Model implements \JsonSerializable, \ArrayAccess { // 记录当前关联信息 $model = $this->parseModel($model); - $foreignKey = $foreignKey ?: Loader::parseName(basename(str_replace('\\', '/', $model))) . '_id'; + $foreignKey = $foreignKey ?: $this->getForeignKey($model); $otherKey = $otherKey ?: (new $model)->getPk(); return new BelongsTo($this, $model, $foreignKey, $otherKey, $joinType); } @@ -1428,7 +1442,7 @@ abstract class Model implements \JsonSerializable, \ArrayAccess // 记录当前关联信息 $model = $this->parseModel($model); $localKey = $localKey ?: $this->getPk(); - $foreignKey = $foreignKey ?: Loader::parseName($this->name) . '_id'; + $foreignKey = $foreignKey ?: $this->getForeignKey($this->name); return new HasMany($this, $model, $foreignKey, $localKey); } @@ -1448,9 +1462,8 @@ abstract class Model implements \JsonSerializable, \ArrayAccess $model = $this->parseModel($model); $through = $this->parseModel($through); $localKey = $localKey ?: $this->getPk(); - $foreignKey = $foreignKey ?: Loader::parseName($this->name) . '_id'; - $name = Loader::parseName(basename(str_replace('\\', '/', $through))); - $throughKey = $throughKey ?: $name . '_id'; + $foreignKey = $foreignKey ?: $this->getForeignKey($this->name); + $throughKey = $throughKey ?: $this->getForeignKey($through); return new HasManyThrough($this, $model, $through, $foreignKey, $throughKey, $localKey); } @@ -1470,7 +1483,7 @@ abstract class Model implements \JsonSerializable, \ArrayAccess $name = Loader::parseName(basename(str_replace('\\', '/', $model))); $table = $table ?: $this->db(false)->getTable(Loader::parseName($this->name) . '_' . $name); $foreignKey = $foreignKey ?: $name . '_id'; - $localKey = $localKey ?: Loader::parseName($this->name) . '_id'; + $localKey = $localKey ?: $this->getForeignKey($this->name); return new BelongsToMany($this, $model, $table, $foreignKey, $localKey); }