diff --git a/Annotation/Model/Relation.php b/Annotation/Model/Relation.php index 4bfe5025..71d5ad85 100644 --- a/Annotation/Model/Relation.php +++ b/Annotation/Model/Relation.php @@ -28,16 +28,16 @@ use JetBrains\PhpStorm\Pure; /** * @param array $handler - * @return mixed + * @return bool */ - #[Pure] public function execute(array $handler): mixed + public function execute(array $handler): bool { -// /** @var ActiveRecord $activeRecord */ -// [$activeRecord, $method] = $handler; -// -// $activeRecord->setRelate($this->name, $method); + /** @var ActiveRecord $activeRecord */ + [$activeRecord, $method] = $handler; - return parent::execute($handler); + $activeRecord->setRelate($this->name, $method); + + return true; } } diff --git a/Database/ActiveQuery.php b/Database/ActiveQuery.php index c90885ec..0bd23187 100644 --- a/Database/ActiveQuery.php +++ b/Database/ActiveQuery.php @@ -235,14 +235,7 @@ class ActiveQuery extends Component implements ISqlBuilder if (empty($this->with) || !is_array($this->with)) { return $model; } - foreach ($this->with as $val) { - $method = 'get' . ucfirst($val); - if (!method_exists($model, $method)) { - continue; - } - $model->setRelate($val, $method); - } - return $model; + return $model->setWith($this->with); } /** diff --git a/Database/ActiveRecord.php b/Database/ActiveRecord.php index 8f6d4f16..9a74cff1 100644 --- a/Database/ActiveRecord.php +++ b/Database/ActiveRecord.php @@ -245,7 +245,7 @@ class ActiveRecord extends BaseActiveRecord */ private function resolveObject($method): mixed { - $resolve = $this->$method(); + $resolve = $this->{$this->getRelate($method)}(); if ($resolve instanceof HasBase) { $resolve = $resolve->get(); } @@ -296,11 +296,11 @@ class ActiveRecord extends BaseActiveRecord private function runRelate(): array { $relates = []; - if (empty($this->_relate)) { + if (empty($this->_with)) { return $relates; } - foreach ($this->_relate as $key => $val) { - $relates[$key] = $this->resolveObject($val); + foreach ($this->_with as $val) { + $relates[$val] = $this->resolveObject($val); } return $relates; } diff --git a/Database/Base/BaseActiveRecord.php b/Database/Base/BaseActiveRecord.php index 8e0c4bb2..e3a50adf 100644 --- a/Database/Base/BaseActiveRecord.php +++ b/Database/Base/BaseActiveRecord.php @@ -143,6 +143,17 @@ abstract class BaseActiveRecord extends Component implements IOrm, ArrayAccess } + /** + * @param $data + * @return BaseActiveRecord + */ + public function setWith($data): static + { + $this->_with = $data; + return $this; + } + + /** * @param $name * @param $method