改进模型关联

This commit is contained in:
thinkphp
2017-04-01 12:50:32 +08:00
parent f72ff880dd
commit ae501f4028
8 changed files with 113 additions and 17 deletions

View File

@@ -130,6 +130,8 @@ class BelongsTo extends OneToOne
$relationModel = null;
} else {
$relationModel = $data[$result->$foreignKey];
$relationModel->setParent($result);
$relationModel->isUpdate(true);
}
if ($relationModel && !empty($this->bindAttr)) {
@@ -161,6 +163,8 @@ class BelongsTo extends OneToOne
$relationModel = null;
} else {
$relationModel = $data[$result->$foreignKey];
$relationModel->setParent($result);
$relationModel->isUpdate(true);
}
if ($relationModel && !empty($this->bindAttr)) {
// 绑定关联属性

View File

@@ -84,6 +84,11 @@ class HasMany extends Relation
if (!isset($data[$result->$localKey])) {
$data[$result->$localKey] = [];
}
foreach ($data[$result->$localKey] as &$relationModel) {
$relationModel->setParent($result);
}
$result->setAttr($attr, $this->resultSetBuild($data[$result->$localKey]));
}
}
@@ -108,6 +113,11 @@ class HasMany extends Relation
if (!isset($data[$result->$localKey])) {
$data[$result->$localKey] = [];
}
foreach ($data[$result->$localKey] as &$relationModel) {
$relationModel->setParent($result);
}
$result->setAttr(Loader::parseName($relation), $this->resultSetBuild($data[$result->$localKey]));
}
}

View File

@@ -132,10 +132,12 @@ class HasOne extends OneToOne
$relationModel = null;
} else {
$relationModel = $data[$result->$localKey];
}
if ($relationModel && !empty($this->bindAttr)) {
// 绑定关联属性
$this->bindAttr($relationModel, $result, $this->bindAttr);
$relationModel->setParent($result);
$relationModel->isUpdate(true);
if (!empty($this->bindAttr)) {
// 绑定关联属性
$this->bindAttr($relationModel, $result, $this->bindAttr);
}
}
// 设置关联属性
$result->setAttr($attr, $relationModel);
@@ -163,12 +165,14 @@ class HasOne extends OneToOne
$relationModel = null;
} else {
$relationModel = $data[$result->$localKey];
$relationModel->setParent($result);
$relationModel->isUpdate(true);
if (!empty($this->bindAttr)) {
// 绑定关联属性
$this->bindAttr($relationModel, $result, $this->bindAttr);
}
}
if ($relationModel && !empty($this->bindAttr)) {
// 绑定关联属性
$this->bindAttr($relationModel, $result, $this->bindAttr);
}
$result->setAttr(Loader::parseName($relation), $relationModel);
}

View File

@@ -119,6 +119,10 @@ class MorphMany extends Relation
if (!isset($data[$result->$pk])) {
$data[$result->$pk] = [];
}
foreach ($data[$result->$pk] as &$relationModel) {
$relationModel->setParent($result);
$relationModel->isUpdate(true);
}
$result->setAttr($attr, $this->resultSetBuild($data[$result->$pk]));
}
}
@@ -141,6 +145,12 @@ class MorphMany extends Relation
$this->morphKey => $result->$pk,
$this->morphType => $this->type,
], $relation, $subRelation, $closure);
foreach ($data[$result->$pk] as &$relationModel) {
$relationModel->setParent($result);
$relationModel->isUpdate(true);
}
$result->setAttr(Loader::parseName($relation), $this->resultSetBuild($data[$result->$pk]));
}
}

View File

@@ -117,9 +117,14 @@ class MorphOne extends Relation
// 关联数据封装
foreach ($resultSet as $result) {
if (!isset($data[$result->$pk])) {
$data[$result->$pk] = [];
$relationModel = null;
} else {
$relationModel = $data[$result->$pk];
$relationModel->setParent($result);
$relationModel->isUpdate(true);
}
$result->setAttr($attr, $this->resultSetBuild($data[$result->$pk]));
$result->setAttr($attr, $relationModel);
}
}
}
@@ -137,11 +142,21 @@ class MorphOne extends Relation
{
$pk = $result->getPk();
if (isset($result->$pk)) {
$pk = $result->$pk;
$data = $this->eagerlyMorphToOne([
$this->morphKey => $result->$pk,
$this->morphKey => $pk,
$this->morphType => $this->type,
], $relation, $subRelation, $closure);
$result->setAttr(Loader::parseName($relation), $this->resultSetBuild($data[$result->$pk]));
if (isset($data[$pk])) {
$relationModel = $data[$pk];
$data[$pk]->setParent($result);
$relationModel->isUpdate(true);
} else {
$relationModel = null;
}
$result->setAttr(Loader::parseName($relation), $relationModel);
}
}

View File

@@ -168,7 +168,11 @@ class MorphTo extends Relation
if (!isset($data[$result->$morphKey])) {
throw new Exception('relation data not exists :' . $this->model);
} else {
$result->setAttr($attr, $data[$result->$morphKey]);
$relationModel = $data[$result->$morphKey];
$relationModel->setParent($result);
$relationModel->isUpdate(true);
$result->setAttr($attr, $relationModel);
}
}
}
@@ -220,6 +224,7 @@ class MorphTo extends Relation
$pk = $this->parent->{$this->morphKey};
$data = (new $model)->with($subRelation)->find($pk);
if ($data) {
$data->setParent($result);
$data->isUpdate(true);
}
$result->setAttr(Loader::parseName($relation), $data ?: null);

View File

@@ -245,13 +245,19 @@ abstract class OneToOne extends Relation
}
}
}
if (isset($list[$relation])) {
$relationModel = new $model($list[$relation]);
$relationModel->setParent($result);
$relationModel->isUpdate(true);
if (!empty($this->bindAttr)) {
$this->bindAttr($relationModel, $result, $this->bindAttr);
}
} else {
$relationModel = null;
}
$result->setAttr(Loader::parseName($relation), !isset($relationModel) ? null : $relationModel->isUpdate(true));
$result->setAttr(Loader::parseName($relation), $relationModel);
}
/**