From 4abc1a621b8fd69dace02d80d97d97e4a5d45721 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=91=E6=9E=97?= Date: Tue, 25 Jul 2023 09:33:24 +0800 Subject: [PATCH] qqq --- ActiveQuery.php | 546 +++++++++++++++++++++++++----------------------- Model.php | 4 +- Relation.php | 13 +- 3 files changed, 288 insertions(+), 275 deletions(-) diff --git a/ActiveQuery.php b/ActiveQuery.php index ce30134..6380834 100644 --- a/ActiveQuery.php +++ b/ActiveQuery.php @@ -21,314 +21,326 @@ use Kiri\Abstracts\Component; class ActiveQuery extends Component implements ISqlBuilder { - use QueryTrait; + use QueryTrait; - /** @var bool */ - public bool $asArray = FALSE; + /** @var bool */ + public bool $asArray = FALSE; - /** @var bool */ - public bool $useCache = FALSE; + /** @var bool */ + public bool $useCache = FALSE; - /** - * @var Connection|null - */ - public ?Connection $db = NULL; + /** + * @var Connection|null + */ + public ?Connection $db = NULL; - /** - * @var array - * 参数绑定 - */ - public array $attributes = []; + /** + * @var array + * 参数绑定 + */ + public array $attributes = []; + protected mixed $_mock = null; - /** - * Comply constructor. - * @param $model - * @param array $config - * @throws - */ - public function __construct($model, array $config = []) - { - $this->modelClass = $model; + /** + * Comply constructor. + * @param $model + * @throws + */ + public function __construct($model) + { + $this->modelClass = $model; - $this->builder = SqlBuilder::builder($this); - parent::__construct(); - } + $this->builder = SqlBuilder::builder($this); + parent::__construct(); + } - /** - * 清除不完整数据 - */ - public function clear(): void - { - $this->db = NULL; - $this->useCache = FALSE; - } + /** + * 清除不完整数据 + */ + public function clear(): void + { + $this->db = NULL; + $this->useCache = FALSE; + } - /** - * @param $key - * @param $value - * @return $this - */ - public function addParam($key, $value): static - { - $this->attributes[$key] = $value; - return $this; - } + /** + * @param $key + * @param $value + * @return $this + */ + public function addParam($key, $value): static + { + $this->attributes[$key] = $value; + return $this; + } - /** - * @param int $size - * @param int $page - * @return array - * @throws - */ - #[ArrayShape([])] - public function pagination(int $size = 20, int $page = 1): array - { - $page = max(1, $page); - $size = max(1, $size); + /** + * @param int $size + * @param int $page + * @return array + * @throws + */ + #[ArrayShape([])] + public function pagination(int $size = 20, int $page = 1): array + { + $page = max(1, $page); + $size = max(1, $size); - $offset = ($page - 1) * $size; + $offset = ($page - 1) * $size; - $count = $this->count(); - $lists = $this->offset($offset)->limit($size)->get()->toArray(); - return [ - 'code' => 0, - 'message' => 'ok', - 'size' => $size, - 'page' => $page, - 'count' => $count, - 'next' => max($page + 1, 1), - 'prev' => max($page - 1, 1), - 'param' => $lists, - ]; - } + $count = $this->count(); + $lists = $this->offset($offset)->limit($size)->get()->toArray(); + return [ + 'code' => 0, + 'message' => 'ok', + 'size' => $size, + 'page' => $page, + 'count' => $count, + 'next' => max($page + 1, 1), + 'prev' => max($page - 1, 1), + 'param' => $lists, + ]; + } - /** - * @param bool $asArray - * @return static - */ - public function asArray(bool $asArray = true): static - { - $this->asArray = $asArray; - return $this; - } + /** + * @param bool $asArray + * @return static + */ + public function asArray(bool $asArray = true): static + { + $this->asArray = $asArray; + return $this; + } - /** - * @param array $values - * @return $this - */ - public function addParams(array $values): static - { - foreach ($values as $key => $val) { - $this->addParam($key, $val); - } - return $this; - } + /** + * @param array $values + * @return $this + */ + public function addParams(array $values): static + { + foreach ($values as $key => $val) { + $this->addParam($key, $val); + } + return $this; + } - /** - * @param array $methods - * @return $this - */ - public function with(array $methods): static - { - $this->modelClass->setWith($methods); - return $this; - } + /** + * @param array $methods + * @return $this + */ + public function with(array $methods): static + { + $this->modelClass->setWith($methods); + return $this; + } - /** - * @param $sql - * @param array $params - * @return mixed - * @throws - */ - public function execute($sql, array $params = []): Command - { - return $this->modelClass->getConnection()->createCommand($sql, $params); - } + /** + * @param $sql + * @param array $params + * @return mixed + * @throws + */ + public function execute($sql, array $params = []): Command + { + return $this->modelClass->getConnection()->createCommand($sql, $params); + } - /** - * @return ModelInterface|array|null - * @throws Exception - */ - public function first(): ModelInterface|null|array - { - $data = $this->limit(1)->execute($this->builder->one(), $this->attributes)->one(); - if (is_array($data)) { - return $this->populate($data); - } else { - return NULL; - } - } + /** + * @return ModelInterface|array|null + * @throws Exception + */ + public function first(): ModelInterface|null|array + { + $data = $this->limit(1)->execute($this->builder->one(), $this->attributes)->one(); + if (is_array($data)) { + return $this->populate($data); + } else { + return NULL; + } + } - /** - * @return string - * @throws - */ - public function toSql(): string - { - return $this->builder->get(); - } + /** + * @return string + * @throws + */ + public function toSql(): string + { + return $this->builder->get(); + } - /** - * @return array|Collection - */ - public function get(): Collection|array - { - return $this->all(); - } + /** + * @return array|Collection + * @throws Exception + */ + public function get(): Collection|array + { + $data = $this->execute($this->builder->all(), $this->attributes)->all(); + if ($data === false) { + return new Collection($this, [], $this->modelClass); + } + + $collect = new Collection($this, $data, $this->modelClass); + + return $this->asArray ? $collect->toArray() : $collect; + } - /** - * @throws - */ - public function flush(): array|bool|int|string|null - { - return $this->execute($this->builder->truncate())->exec(); - } + /** + * @throws + */ + public function flush(): array|bool|int|string|null + { + return $this->execute($this->builder->truncate())->exec(); + } - /** - * @param int $size - * @param callable $callback - * @param int $offset - * @return Pagination - * @throws - */ - public function page(int $size, callable $callback, int $offset = 0): Pagination - { - $pagination = new Pagination($this); - $pagination->setOffset($offset); - $pagination->setLimit($size); - $pagination->setCallback($callback); - return $pagination; - } + /** + * @param int $size + * @param callable $callback + * @param int $offset + * @return Pagination + * @throws + */ + public function page(int $size, callable $callback, int $offset = 0): Pagination + { + $pagination = new Pagination($this); + $pagination->setOffset($offset); + $pagination->setLimit($size); + $pagination->setCallback($callback); + return $pagination; + } - /** - * @param string $field - * @param string $setKey - * - * @return array|null - * @throws - */ - public function column(string $field, string $setKey = ''): ?array - { - return $this->all()->column($field, $setKey); - } + /** + * @param string $field + * @param string $setKey + * + * @return array|null + * @throws + */ + public function column(string $field, string $setKey = ''): ?array + { + return $this->get()->column($field, $setKey); + } - /** - * @return array|Collection - * @throws - */ - public function all(): Collection|array - { - $data = $this->execute($this->builder->all(), $this->attributes)->all(); - if ($data === false) { - return new Collection($this, [], $this->modelClass); - } - - $collect = new Collection($this, $data, $this->modelClass); - - return $this->asArray ? $collect->toArray() : $collect; - } - - /** - * @param $data - * @return ModelInterface|array - * @throws Exception - */ - public function populate($data): ModelInterface|array - { - $model = $this->modelClass->populates($data); - if ($this->asArray) { - return $model->toArray(); - } else { - return $model; - } - } + /** + * @param mixed $value + * @return $this + */ + public function withMock(mixed $value): static + { + $this->_mock = $value; + return $this; + } - /** - * @return int - * @throws - */ - public function count(): int - { - return $this->execute($this->builder->count(), $this->attributes)->one()['row_count'] ?? 0; - } + /** + * @return mixed + */ + public function mock(): mixed + { + return $this->_mock; + } - /** - * @param array $data - * @return bool - * @throws - */ - public function update(array $data): bool - { - $generate = $this->builder->update($data); - if (is_bool($generate)) { - return $generate; - } - - $generate[1] = array_merge($this->attributes, $generate[1]); - - return (bool)$this->execute(...$generate)->exec(); - } - - /** - * @param array $data - * @return bool - * @throws - */ - public function insert(array $data): bool - { - [$sql, $params] = $this->builder->insert($data, TRUE); + /** + * @param $data + * @return ModelInterface|array + * @throws Exception + */ + public function populate($data): ModelInterface|array + { + $model = $this->modelClass->populates($data); + if ($this->asArray) { + return $model->toArray(); + } else { + return $model; + } + } - return (bool)$this->execute($sql, $params)->exec(); - } - - /** - * @param $filed - * - * @return null - * @throws - */ - public function value($filed) - { - return $this->first()[$filed] ?? NULL; - } - - /** - * @return bool - * @throws - */ - public function exists(): bool - { - return !empty($this->execute($this->builder->one(), $this->attributes)->fetchColumn()); - } + /** + * @return int + * @throws + */ + public function count(): int + { + return $this->execute($this->builder->count(), $this->attributes)->one()['row_count'] ?? 0; + } - /** - * @param bool $getSql - * @return bool|string - * @throws Exception - */ - public function delete(bool $getSql = FALSE): bool|string - { - $sql = $this->builder->delete(); - if ($getSql === FALSE) { - return (bool)$this->execute($sql, $this->attributes)->delete(); - } - return $sql; - } + /** + * @param array $data + * @return bool + * @throws + */ + public function update(array $data): bool + { + $generate = $this->builder->update($data); + if (is_bool($generate)) { + return $generate; + } + + $generate[1] = array_merge($this->attributes, $generate[1]); + + return (bool)$this->execute(...$generate)->exec(); + } + + /** + * @param array $data + * @return bool + * @throws + */ + public function insert(array $data): bool + { + [$sql, $params] = $this->builder->insert($data, TRUE); + + + return (bool)$this->execute($sql, $params)->exec(); + } + + /** + * @param $filed + * + * @return null + * @throws + */ + public function value($filed) + { + return $this->first()[$filed] ?? NULL; + } + + /** + * @return bool + * @throws + */ + public function exists(): bool + { + return !empty($this->execute($this->builder->one(), $this->attributes)->fetchColumn()); + } + + + /** + * @param bool $getSql + * @return bool|string + * @throws Exception + */ + public function delete(bool $getSql = FALSE): bool|string + { + $sql = $this->builder->delete(); + if ($getSql === FALSE) { + return (bool)$this->execute($sql, $this->attributes)->delete(); + } + return $sql; + } } diff --git a/Model.php b/Model.php index 2e1ccf1..a1f173b 100644 --- a/Model.php +++ b/Model.php @@ -229,7 +229,7 @@ class Model extends Base\Model */ public static function get($condition): Collection|array { - return static::query()->where($condition)->all(); + return static::query()->where($condition)->get(); } @@ -246,7 +246,7 @@ class Model extends Base\Model if (!empty($attributes)) { $query->bindParams($attributes); } - return $query->all(); + return $query->get(); } diff --git a/Relation.php b/Relation.php index 773c378..7d12e6a 100644 --- a/Relation.php +++ b/Relation.php @@ -60,7 +60,7 @@ class Relation extends Component } $activeModel = $this->_query[$_identification]->first(); if (empty($activeModel)) { - return null; + return $this->_query[$_identification]->mock(); } unset($this->_query[$_identification]); return Context::set($_identification, $activeModel); @@ -78,17 +78,18 @@ class Relation extends Component } $activeModel = $this->_query[$_identification]->count(); if (empty($activeModel)) { - return null; + return $this->_query[$_identification]->mock(); } unset($this->_query[$_identification]); return Context::set($_identification, $activeModel); } - /** - * @param string $_identification - * @return mixed - */ + /** + * @param string $_identification + * @return mixed + * @throws Exception + */ public function get(string $_identification): mixed { if (Context::exists($_identification)) {