Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
293eb9e555 |
@@ -26,17 +26,14 @@ class Model implements JsonSerializable
|
|||||||
|
|
||||||
private function initTable(): void
|
private function initTable(): void
|
||||||
{
|
{
|
||||||
if(!$this->ro)
|
if (!$this->ro) {
|
||||||
{
|
|
||||||
if ($this->table == "") {
|
if ($this->table == "") {
|
||||||
$this->table = $this->getDefaultTableName();
|
$this->table = $this->getDefaultTableName();
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
$this->table = "ReadOnlyModel";
|
$this->table = "ReadOnlyModel";
|
||||||
$this->pk = "__idpk";
|
$this->pk = "__idpk";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getTable(): string
|
public function getTable(): string
|
||||||
@@ -87,7 +84,7 @@ class Model implements JsonSerializable
|
|||||||
|
|
||||||
public function find(mixed $key): mixed
|
public function find(mixed $key): mixed
|
||||||
{
|
{
|
||||||
$qb = $this->newQueryBuilder();
|
$qb = $this->newQueryBuilder(get_class($this));
|
||||||
$find = $qb->find($key);
|
$find = $qb->find($key);
|
||||||
if ($find !== null) {
|
if ($find !== null) {
|
||||||
$this->fillData($find->getValues());
|
$this->fillData($find->getValues());
|
||||||
@@ -99,9 +96,8 @@ class Model implements JsonSerializable
|
|||||||
public function save(): bool
|
public function save(): bool
|
||||||
{
|
{
|
||||||
$ret = false;
|
$ret = false;
|
||||||
if(!$this->ro)
|
if (!$this->ro) {
|
||||||
{
|
$qb = $this->newQueryBuilder("");
|
||||||
$qb = $this->newQueryBuilder();
|
|
||||||
if ($this->new) {
|
if ($this->new) {
|
||||||
$query = $qb->getPreparedQuery($this->values);
|
$query = $qb->getPreparedQuery($this->values);
|
||||||
$id = Connection::getInstance($this->connection)->insertQuery($query);
|
$id = Connection::getInstance($this->connection)->insertQuery($query);
|
||||||
@@ -126,13 +122,13 @@ class Model implements JsonSerializable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function newQueryBuilder(): QueryBuilder
|
public function newQueryBuilder($className): QueryBuilder
|
||||||
{
|
{
|
||||||
return new QueryBuilder($this->table, $this->pk, $this->connection);
|
return new QueryBuilder($this->table, $this->pk, $this->connection, $className);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __set($name, $value): void
|
public function __set($name, $value): void
|
||||||
@@ -152,10 +148,16 @@ class Model implements JsonSerializable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function getClassName()
|
||||||
|
{
|
||||||
|
return static::class;
|
||||||
|
}
|
||||||
|
|
||||||
public static function q(): QueryBuilder
|
public static function q(): QueryBuilder
|
||||||
{
|
{
|
||||||
|
$cls = self::getClassName();
|
||||||
$ist = new static();
|
$ist = new static();
|
||||||
return $ist->newQueryBuilder();
|
return $ist->newQueryBuilder($cls);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __get($name): mixed
|
public function __get($name): mixed
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ class QueryBuilder
|
|||||||
protected array $orders;
|
protected array $orders;
|
||||||
protected array $groupby;
|
protected array $groupby;
|
||||||
protected string $table;
|
protected string $table;
|
||||||
|
protected string $classname;
|
||||||
protected string $connection;
|
protected string $connection;
|
||||||
protected string $pk;
|
protected string $pk;
|
||||||
protected ?int $take;
|
protected ?int $take;
|
||||||
@@ -20,8 +21,9 @@ class QueryBuilder
|
|||||||
public const MODE_AND = 0;
|
public const MODE_AND = 0;
|
||||||
public const MODE_OR = 1;
|
public const MODE_OR = 1;
|
||||||
|
|
||||||
public function __construct($table, $pk = "id", $connection = "")
|
public function __construct($table, $pk = "id", $connection = "", $classname = "")
|
||||||
{
|
{
|
||||||
|
$this->classname = $classname;
|
||||||
$this->table = $table;
|
$this->table = $table;
|
||||||
$this->pk = $pk;
|
$this->pk = $pk;
|
||||||
$this->connection = $connection;
|
$this->connection = $connection;
|
||||||
@@ -208,7 +210,12 @@ class QueryBuilder
|
|||||||
{
|
{
|
||||||
$ret = array();
|
$ret = array();
|
||||||
foreach ($data as $row) {
|
foreach ($data as $row) {
|
||||||
$model = new Model();
|
if ($this->classname != "") {
|
||||||
|
$model = new $this->classname();
|
||||||
|
} else {
|
||||||
|
$model = new Model();
|
||||||
|
}
|
||||||
|
|
||||||
$ret[] = $model->setPk($this->pk)->setTable($this->table)->fillData($row);
|
$ret[] = $model->setPk($this->pk)->setTable($this->table)->fillData($row);
|
||||||
}
|
}
|
||||||
return new Collection($ret);
|
return new Collection($ret);
|
||||||
@@ -235,11 +242,10 @@ class QueryBuilder
|
|||||||
|
|
||||||
$where = $this->getWhere();
|
$where = $this->getWhere();
|
||||||
$Orwhere = $this->getWhere(QueryBuilder::MODE_OR);
|
$Orwhere = $this->getWhere(QueryBuilder::MODE_OR);
|
||||||
|
|
||||||
$this->fillData($ret);
|
$this->fillData($ret);
|
||||||
|
|
||||||
if($where!="" && $Orwhere!="")
|
if ($where != "" && $Orwhere != "") {
|
||||||
{
|
|
||||||
$Orwhere = " OR " . $Orwhere;
|
$Orwhere = " OR " . $Orwhere;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -256,8 +262,8 @@ class QueryBuilder
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function fillData(Query &$query): void
|
private function fillData(Query &$query): void
|
||||||
{
|
{
|
||||||
foreach (array_merge($this->wheres,$this->orwheres) as $expression) {
|
foreach (array_merge($this->wheres, $this->orwheres) as $expression) {
|
||||||
if ($expression instanceof Expression) {
|
if ($expression instanceof Expression) {
|
||||||
if ($expression->hasData()) {
|
if ($expression->hasData()) {
|
||||||
$query->addData($expression->getValue());
|
$query->addData($expression->getValue());
|
||||||
|
|||||||
@@ -116,6 +116,8 @@ test("extending model",function()
|
|||||||
$row = $qbs->find(1);
|
$row = $qbs->find(1);
|
||||||
expect($row->id)->toBe(1);
|
expect($row->id)->toBe(1);
|
||||||
expect($row->col1)->toBe("test");
|
expect($row->col1)->toBe("test");
|
||||||
|
|
||||||
|
expect($row)->toBeInstanceOf(Test::class);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("order by", function(){
|
test("order by", function(){
|
||||||
|
|||||||
Reference in New Issue
Block a user