Compare commits

...

7 Commits

Author SHA1 Message Date
as2252258 beb48f41d2 eee 2024-08-27 11:19:22 +08:00
as2252258 8d917b0f92 eee 2024-08-08 11:12:09 +08:00
as2252258 08fbc49091 eee 2024-08-08 10:52:48 +08:00
as2252258 08e49cfa65 eee 2024-07-10 16:18:27 +08:00
as2252258 d58850b158 eee 2024-07-08 12:06:41 +08:00
as2252258 aba45e8cb9 eee 2024-07-08 10:58:52 +08:00
as2252258 ed22201bef eee 2024-07-02 21:38:30 +08:00
6 changed files with 238 additions and 51 deletions
+3 -2
View File
@@ -221,10 +221,11 @@ interface ActiveQueryInterface
public function whereNotBetween(string $column, int|float $start, int|float $end): QueryTrait; public function whereNotBetween(string $column, int|float $start, int|float $end): QueryTrait;
/** /**
* @param array $column * @param array|string $column
* @param mixed|null $value
* @return QueryTrait * @return QueryTrait
*/ */
public function where(array $column): QueryTrait; public function where(array|string $column, mixed $value = null): QueryTrait;
/** /**
+6 -4
View File
@@ -1,4 +1,5 @@
<?php /** @noinspection ALL */ <?php
/** @noinspection ALL */
/** /**
* Created by PhpStorm. * Created by PhpStorm.
* User: whwyy * User: whwyy
@@ -234,8 +235,9 @@ abstract class Model extends Component implements ModelInterface, ArrayAccess, \
* @return Model|null * @return Model|null
* @throws * @throws
*/ */
public static function findOne(int|string|array $param): ?static public static function findOne(int|string|array|null $param): ?static
{ {
if (empty($param)) return null;
$model = static::instance(); $model = static::instance();
$query = new ActiveQuery($model); $query = new ActiveQuery($model);
$query->from($model->getTable())->alias('t1'); $query->from($model->getTable())->alias('t1');
@@ -436,7 +438,7 @@ abstract class Model extends Component implements ModelInterface, ArrayAccess, \
private function insert(): bool|static private function insert(): bool|static
{ {
$sql = SqlBuilder::builder($query = static::query())->insert($this->_attributes); $sql = SqlBuilder::builder($query = static::query())->insert($this->_attributes);
$lastId = $this->getConnection()->createCommand($sql, $query->params)->save(); $lastId = $this->getConnection()->createCommand($sql, $query->params)->exec();
if ($lastId === false) { if ($lastId === false) {
return false; return false;
} }
@@ -464,7 +466,7 @@ abstract class Model extends Component implements ModelInterface, ArrayAccess, \
if ($generate === false) { if ($generate === false) {
return false; return false;
} }
if (!$this->getConnection()->createCommand($generate, $query->params)->save()) { if (!$this->getConnection()->createCommand($generate, $query->params)->exec()) {
return FALSE; return FALSE;
} }
return $this->refresh()->afterSave($old, $change); return $this->refresh()->afterSave($old, $change);
-9
View File
@@ -47,15 +47,6 @@ class Command extends Component
return (bool)$this->_prepare(); return (bool)$this->_prepare();
} }
/**
* @return bool
* @throws
*/
public function save(): bool
{
return (bool)$this->_prepare();
}
/** /**
* @return bool|array * @return bool|array
+2 -2
View File
@@ -18,10 +18,10 @@ interface ModelInterface
{ {
/** /**
* @param array|string|int $param * @param array|string|int|null $param
* @return ModelInterface|null * @return ModelInterface|null
*/ */
public static function findOne(array|string|int $param): ?static; public static function findOne(array|string|int|null $param): ?static;
/** /**
+22 -22
View File
@@ -51,7 +51,7 @@ class SqlBuilder extends Component
*/ */
public function getCondition(): string public function getCondition(): string
{ {
return $this->where($this->query->where); return $this->where($this->query->getWhere());
} }
@@ -73,9 +73,9 @@ class SqlBuilder extends Component
*/ */
public function update(array $attributes): bool|string public function update(array $attributes): bool|string
{ {
$conditions = $this->query->params; $conditions = $this->query->getParams();
$this->query->params = []; $this->query->setParams([]);
$data = $this->__updateBuilder($this->makeParams($attributes)); $data = $this->__updateBuilder($this->makeParams($attributes));
foreach ($conditions as $condition) { foreach ($conditions as $condition) {
$this->query->pushParam($condition); $this->query->pushParam($condition);
} }
@@ -109,7 +109,7 @@ class SqlBuilder extends Component
if (empty($string)) { if (empty($string)) {
return Kiri::getLogger()->failure('None data update.'); return Kiri::getLogger()->failure('None data update.');
} }
return 'UPDATE ' . $this->query->from . ' SET ' . implode(',', $string) . $this->make(); return 'UPDATE ' . $this->query->getFrom() . ' SET ' . implode(',', $string) . $this->make();
} }
@@ -121,7 +121,7 @@ class SqlBuilder extends Component
*/ */
public function insert(array $attributes, bool $isBatch = false): string public function insert(array $attributes, bool $isBatch = false): string
{ {
$update = 'INSERT INTO ' . $this->query->from; $update = 'INSERT INTO ' . $this->query->getFrom();
if ($isBatch === false) { if ($isBatch === false) {
$attributes = [$attributes]; $attributes = [$attributes];
} }
@@ -143,7 +143,7 @@ class SqlBuilder extends Component
*/ */
public function delete(): string public function delete(): string
{ {
return 'DELETE FROM ' . $this->query->from . $this->make(); return 'DELETE FROM ' . $this->query->getFrom() . $this->make();
} }
@@ -215,7 +215,7 @@ class SqlBuilder extends Component
*/ */
public function one(): string public function one(): string
{ {
return $this->makeSelect($this->query->select) . $this->make() . $this->makeLimit($this->query->limit(1)); return $this->makeSelect($this->query->getSelect()) . $this->make() . $this->makeLimit($this->query->limit(1));
} }
@@ -225,7 +225,7 @@ class SqlBuilder extends Component
*/ */
public function all(): string public function all(): string
{ {
return $this->makeSelect($this->query->select) . $this->make() . $this->makeLimit($this->query); return $this->makeSelect($this->query->getSelect()) . $this->make() . $this->makeLimit($this->query);
} }
@@ -277,12 +277,12 @@ class SqlBuilder extends Component
*/ */
private function makeSelect(array $select = ['*']): string private function makeSelect(array $select = ['*']): string
{ {
$select = "SELECT " . implode(',', $select) . " FROM " . $this->query->from; $select = "SELECT " . implode(',', $select) . " FROM " . $this->query->getFrom();
if ($this->query->alias != "") { if ($this->query->getAlias() != "") {
$select .= " AS " . $this->query->alias; $select .= " AS " . $this->query->getAlias();
} }
if (count($this->query->join) > 0) { if (count($this->query->getJoin()) > 0) {
$select .= ' ' . implode(' ', $this->query->join); $select .= ' ' . implode(' ', $this->query->getJoin());
} }
return $select; return $select;
} }
@@ -293,8 +293,8 @@ class SqlBuilder extends Component
*/ */
private function makeGroup(): string private function makeGroup(): string
{ {
if ($this->query->group != "") { if ($this->query->getGroup() != "") {
return ' GROUP BY ' . $this->query->group; return ' GROUP BY ' . $this->query->getGroup();
} }
return ''; return '';
} }
@@ -305,8 +305,8 @@ class SqlBuilder extends Component
*/ */
private function makeOrder(): string private function makeOrder(): string
{ {
if (count($this->query->order) > 0) { if (count($this->query->getOrder()) > 0) {
return ' ORDER BY ' . implode(',', $this->query->order); return ' ORDER BY ' . implode(',', $this->query->getOrder());
} }
return ''; return '';
} }
@@ -317,7 +317,7 @@ class SqlBuilder extends Component
*/ */
private function makeCondition(): string private function makeCondition(): string
{ {
$condition = $this->where($this->query->where); $condition = $this->where($this->query->getWhere());
if (empty($condition)) { if (empty($condition)) {
return ''; return '';
} }
@@ -327,8 +327,8 @@ class SqlBuilder extends Component
private function makeLimit(): string private function makeLimit(): string
{ {
if ($this->query->offset >= 0 && $this->query->limit >= 1) { if ($this->query->getOffset() >= 0 && $this->query->getLimit() >= 1) {
return ' LIMIT ' . $this->query->offset . ',' . $this->query->limit; return ' LIMIT ' . $this->query->getOffset() . ',' . $this->query->getLimit();
} }
return ''; return '';
} }
@@ -354,7 +354,7 @@ class SqlBuilder extends Component
*/ */
public function truncate(): string public function truncate(): string
{ {
return sprintf('TRUNCATE %s', $this->query->from); return sprintf('TRUNCATE %s', $this->query->getFrom());
} }
+205 -12
View File
@@ -27,20 +27,20 @@ use Kiri\Abstracts\Component;
*/ */
abstract class QueryTrait extends Component implements ActiveQueryInterface, ISqlBuilder abstract class QueryTrait extends Component implements ActiveQueryInterface, ISqlBuilder
{ {
public array $where = []; protected array $where = [];
public array $select = ['*']; protected array $select = ['*'];
public array $join = []; protected array $join = [];
public array $order = []; protected array $order = [];
public int $offset = -1; protected int $offset = -1;
public int $limit = -1; protected int $limit = -1;
public string $group = ''; protected string $group = '';
public string $from = ''; protected string $from = '';
public string $alias = 't1'; protected string $alias = 't1';
protected array $filter = []; protected array $filter = [];
protected bool $lock = false; protected bool $lock = false;
protected SqlBuilder $builder; protected SqlBuilder $builder;
public array $params = []; protected array $params = [];
private array $_alias = ['t1']; protected array $_alias = ['t1'];
/** /**
@@ -63,6 +63,195 @@ abstract class QueryTrait extends Component implements ActiveQueryInterface, ISq
} }
/**
* @param array $where
* @return void
*/
public function setWhere(array $where): void
{
$this->where = $where;
}
/**
* @param array $select
* @return void
*/
public function setSelect(array $select): void
{
$this->select = $select;
}
/**
* @param array $join
* @return void
*/
public function setJoin(array $join): void
{
$this->join = $join;
}
/**
* @param array $order
* @return void
*/
public function setOrder(array $order): void
{
$this->order = $order;
}
/**
* @param int $offset
* @return void
*/
public function setOffset(int $offset): void
{
$this->offset = $offset;
}
/**
* @param int $limit
* @return void
*/
public function setLimit(int $limit): void
{
$this->limit = $limit;
}
/**
* @param string $group
* @return void
*/
public function setGroup(string $group): void
{
$this->group = $group;
}
/**
* @param string $from
* @return void
*/
public function setFrom(string $from): void
{
$this->from = $from;
}
/**
* @param string $alias
* @return void
*/
public function setAlias(string $alias): void
{
$this->alias = $alias;
}
/**
* @param array $params
* @return void
*/
public function setParams(array $params): void
{
$this->params = $params;
}
/**
* @return array
*/
public function getWhere(): array
{
return $this->where;
}
/**
* @return array|string[]
*/
public function getSelect(): array
{
return $this->select;
}
/**
* @return array
*/
public function getJoin(): array
{
return $this->join;
}
/**
* @return array
*/
public function getOrder(): array
{
return $this->order;
}
/**
* @return int
*/
public function getOffset(): int
{
return $this->offset;
}
/**
* @return int
*/
public function getLimit(): int
{
return $this->limit;
}
/**
* @return string
*/
public function getGroup(): string
{
return $this->group;
}
/**
* @return string
*/
public function getFrom(): string
{
return $this->from;
}
/**
* @return string
*/
public function getAlias(): string
{
return $this->alias;
}
/**
* @return array
*/
public function getParams(): array
{
return $this->params;
}
/** /**
* @param string $column * @param string $column
* @param callable $callable * @param callable $callable
@@ -623,10 +812,14 @@ abstract class QueryTrait extends Component implements ActiveQueryInterface, ISq
/** /**
* @param array|string $column * @param array|string $column
* @param mixed $value
* @return $this * @return $this
*/ */
public function where(array|string $column): static public function where(array|string $column, mixed $value = null): static
{ {
if (func_num_args() === 2) {
return $this->addArray([$column => $value]);
}
if (is_string($column)) { if (is_string($column)) {
return $this->whereRaw($column); return $this->whereRaw($column);
} else { } else {