mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-07 23:22:48 +08:00
修正Model类关联预载入
This commit is contained in:
@@ -65,6 +65,8 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
|
|||||||
protected $isUpdate = false;
|
protected $isUpdate = false;
|
||||||
// 当前执行的关联类型
|
// 当前执行的关联类型
|
||||||
private $relation;
|
private $relation;
|
||||||
|
// 是否预载入
|
||||||
|
protected $eagerly = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 初始化过的模型.
|
* 初始化过的模型.
|
||||||
@@ -787,10 +789,10 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
|
|||||||
*/
|
*/
|
||||||
public function eagerlyResultSet($resultSet, $relation)
|
public function eagerlyResultSet($resultSet, $relation)
|
||||||
{
|
{
|
||||||
|
$this->eagerly = true;
|
||||||
$relations = is_string($relation) ? explode(',', $relation) : $relation;
|
$relations = is_string($relation) ? explode(',', $relation) : $relation;
|
||||||
|
|
||||||
foreach ($relations as $relation) {
|
foreach ($relations as $relation) {
|
||||||
$subRelation = null;
|
|
||||||
if (strpos($relation, '.')) {
|
if (strpos($relation, '.')) {
|
||||||
list($relation, $subRelation) = explode('.', $relation);
|
list($relation, $subRelation) = explode('.', $relation);
|
||||||
}
|
}
|
||||||
@@ -862,6 +864,7 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
|
|||||||
}
|
}
|
||||||
$this->relation = [];
|
$this->relation = [];
|
||||||
}
|
}
|
||||||
|
$this->eagerly = false;
|
||||||
return $resultSet;
|
return $resultSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -872,8 +875,9 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
|
|||||||
* @param string $relation 关联名
|
* @param string $relation 关联名
|
||||||
* @return Model
|
* @return Model
|
||||||
*/
|
*/
|
||||||
public function eagerlyResult($result, $with)
|
public function eagerlyResult($result, $relation)
|
||||||
{
|
{
|
||||||
|
$this->eagerly = true;
|
||||||
$relations = is_string($relation) ? explode(',', $relation) : $relation;
|
$relations = is_string($relation) ? explode(',', $relation) : $relation;
|
||||||
|
|
||||||
foreach ($relations as $relation) {
|
foreach ($relations as $relation) {
|
||||||
@@ -942,6 +946,7 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
|
|||||||
}
|
}
|
||||||
$this->relation = [];
|
$this->relation = [];
|
||||||
}
|
}
|
||||||
|
$this->eagerly = false;
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -959,7 +964,8 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
|
|||||||
$localKey = $localKey ?: $this->pk;
|
$localKey = $localKey ?: $this->pk;
|
||||||
$foreignKey = $foreignKey ?: Loader::parseName($this->name) . '_id';
|
$foreignKey = $foreignKey ?: Loader::parseName($this->name) . '_id';
|
||||||
$this->relation = [self::HAS_ONE, $foreignKey, $localKey];
|
$this->relation = [self::HAS_ONE, $foreignKey, $localKey];
|
||||||
if (isset($this->data[$localKey])) {
|
|
||||||
|
if (!$this->eagerly && isset($this->data[$localKey])) {
|
||||||
// 关联查询封装
|
// 关联查询封装
|
||||||
return $model::where($foreignKey, $this->data[$localKey]);
|
return $model::where($foreignKey, $this->data[$localKey]);
|
||||||
} else {
|
} else {
|
||||||
@@ -982,7 +988,8 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
|
|||||||
$foreignKey = $foreignKey ?: $this->pk;
|
$foreignKey = $foreignKey ?: $this->pk;
|
||||||
$localKey = $localKey ?: Loader::parseName(basename(str_replace('\\', '/', $model))) . '_id';
|
$localKey = $localKey ?: Loader::parseName(basename(str_replace('\\', '/', $model))) . '_id';
|
||||||
$this->relation = [self::BELONGS_TO, $foreignKey, $localKey];
|
$this->relation = [self::BELONGS_TO, $foreignKey, $localKey];
|
||||||
if (isset($this->data[$localKey])) {
|
|
||||||
|
if (!$this->eagerly && isset($this->data[$localKey])) {
|
||||||
// 关联查询封装
|
// 关联查询封装
|
||||||
return $model::where($foreignKey, $this->data[$localKey]);
|
return $model::where($foreignKey, $this->data[$localKey]);
|
||||||
} else {
|
} else {
|
||||||
@@ -1005,7 +1012,7 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
|
|||||||
$foreignKey = $foreignKey ?: Loader::parseName($this->name) . '_id';
|
$foreignKey = $foreignKey ?: Loader::parseName($this->name) . '_id';
|
||||||
$this->relation = [self::HAS_MANY, $foreignKey, $localKey];
|
$this->relation = [self::HAS_MANY, $foreignKey, $localKey];
|
||||||
|
|
||||||
if (isset($this->data[$localKey])) {
|
if (!$this->eagerly && isset($this->data[$localKey])) {
|
||||||
// 关联查询封装
|
// 关联查询封装
|
||||||
return $model::where($foreignKey, $this->data[$localKey]);
|
return $model::where($foreignKey, $this->data[$localKey]);
|
||||||
} else {
|
} else {
|
||||||
@@ -1028,7 +1035,7 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
|
|||||||
$localKey = $localKey ?: Loader::parseName(basename(str_replace('\\', '/', $model))) . '_id';
|
$localKey = $localKey ?: Loader::parseName(basename(str_replace('\\', '/', $model))) . '_id';
|
||||||
$this->relation = [self::BELONGS_TO_MANY, $foreignKey, $localKey];
|
$this->relation = [self::BELONGS_TO_MANY, $foreignKey, $localKey];
|
||||||
|
|
||||||
if (isset($this->data[$localKey])) {
|
if (!$this->eagerly && isset($this->data[$localKey])) {
|
||||||
// 关联查询封装
|
// 关联查询封装
|
||||||
return $model::where($foreignKey, $this->data[$localKey]);
|
return $model::where($foreignKey, $this->data[$localKey]);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user