Skip to content

Commit 3762a0f

Browse files
committed
改进Model类__unset方法
1 parent 56d1c62 commit 3762a0f

File tree

2 files changed

+27
-13
lines changed

2 files changed

+27
-13
lines changed

src/Model.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -785,6 +785,7 @@ public function __unset(string $name): void
785785
$name = $this->getRealFieldName($name);
786786

787787
$this->setWeakData('data', $name, null);
788+
$this->setWeakData('get', $name, null);
788789
}
789790

790791
public function __toString()

src/model/View.php

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -114,22 +114,35 @@ private function fetchViewAttr(string $field, array $data)
114114
// 获取主模型数据(支持获取器)
115115
$value = $model->$field;
116116
} else {
117-
// 获取关联模型数据
118-
$mapping = $this->getOption('viewMapping', []);
119-
$relations = $this->getOption('autoMapping', []);
120-
$value = null;
121-
foreach ($relations as $relation) {
122-
if (isset($data[$relation]) && $model->$relation->hasData($field)) {
123-
$value = $model->$relation->$field;
124-
if (!isset($mapping[$field])) {
125-
$mapping[$field] = $relation . '->' . $field;
126-
$this->setOption('viewMapping', $mapping);
127-
}
128-
break;
117+
// 获取自动映射的属性数据
118+
$value = $this->getAutoRelationValue($field, $data);
119+
}
120+
return $value;
121+
}
122+
123+
/**
124+
* 获取autoMapping自动映射的视图属性值.
125+
*
126+
* @param string $field 视图属性
127+
* @param array $data 模型数据
128+
*
129+
* @return mixed
130+
*/
131+
private function getAutoRelationValue(string $field, array $data)
132+
{
133+
$mapping = $this->getOption('viewMapping', []);
134+
$relations = $this->getOption('autoMapping', []);
135+
foreach ($relations as $relation) {
136+
if (isset($data[$relation]) && $this->model()->$relation->hasData($field)) {
137+
$value = $this->model()->$relation->$field;
138+
if (!isset($mapping[$field])) {
139+
$mapping[$field] = $relation . '->' . $field;
140+
$this->setOption('viewMapping', $mapping);
129141
}
142+
break;
130143
}
131144
}
132-
return $value;
145+
return $value ?? null;
133146
}
134147

135148
/**

0 commit comments

Comments
 (0)