diff --git a/Base/Model.php b/Base/Model.php index e5a2724..a060f96 100644 --- a/Base/Model.php +++ b/Base/Model.php @@ -510,6 +510,18 @@ abstract class Model extends Component implements ModelInterface, ArrayAccess, \ } + /** + * @return array + */ + public function getChanges(): array + { + if (!$this->isNewExample) { + return \array_uintersect_assoc($this->_oldAttributes, $this->_attributes); + } + return $this->_attributes; + } + + /** * @param $value * @return $this @@ -534,7 +546,7 @@ abstract class Model extends Component implements ModelInterface, ArrayAccess, \ return TRUE; } $validate = $this->resolve($rule); - if (!$validate->validation()) { + if (!$validate->validation($this)) { return \Kiri::getLogger()->failure($validate->getError(), 'mysql'); } else { return TRUE; @@ -548,11 +560,14 @@ abstract class Model extends Component implements ModelInterface, ArrayAccess, \ */ private function resolve($rule): Validator { - $validate = Validator::instance($this->_attributes, $this); + $validate = new Validator(); foreach ($rule as $val) { $field = array_shift($val); - - $validate->make($field, $val); + if (is_string($field)) { + $validate->make($this, [$field], $val); + } else { + $validate->make($this, $field, $val); + } } return $validate; } diff --git a/ModelInterface.php b/ModelInterface.php index 3a94a3d..351a8f3 100644 --- a/ModelInterface.php +++ b/ModelInterface.php @@ -17,12 +17,12 @@ namespace Database; interface ModelInterface { - /** - * @param array|string|int $param - * @param null $db - * @return ModelInterface|null - */ - public static function findOne(array|string|int $param, $db = NULL): ?static; + /** + * @param array|string|int $param + * @param null $db + * @return ModelInterface|null + */ + public static function findOne(array|string|int $param, $db = NULL): ?static; /** @@ -31,44 +31,75 @@ interface ModelInterface public function optimize(): mixed; - /** - * @param int $param - * @param null $db - * @return ModelInterface|null - */ - public static function primary(int $param, $db = NULL): ?static; + /** + * @param int $param + * @param null $db + * @return ModelInterface|null + */ + public static function primary(int $param, $db = NULL): ?static; - /** - * @param array $data - * @return static - */ - public static function populate(array $data): static; + /** + * @param array $data + * @return static + */ + public static function populate(array $data): static; - /** - * @return ActiveQuery - * return a sql queryBuilder - */ - public static function query(): ActiveQuery; + /** + * @return ActiveQuery + * return a sql queryBuilder + */ + public static function query(): ActiveQuery; - /** - * @return ?string - */ - public function getPrimary(): ?string; + /** + * @return ?string + */ + public function getPrimary(): ?string; - /** - * @return string - */ - public function getTable(): string; + /** + * @return string + */ + public function getTable(): string; - /** - * @return Connection - */ - public function getConnection(): Connection; + /** + * @return Connection + */ + public function getConnection(): Connection; + /** + * @param string $field + * @return mixed + */ + public function getAttribute(string $field): mixed; + + /** + * @param string $field + * @return mixed + */ + public function getOldAttribute(string $field): mixed; + + + /** + * @param string $field + * @return mixed + */ + public function setAttribute(string $field): mixed; + + /** + * @param string $field + * @return mixed + */ + public function setOldAttribute(string $field): mixed; + + + /** + * @return array + */ + public function getChanges(): array; + }