1 Commits
1.0.6 ... 1.0.7

Author SHA1 Message Date
Gregory Letellier
293eb9e555 cast extended models when loading from database 2025-01-09 12:00:25 +01:00
3 changed files with 31 additions and 21 deletions

View File

@@ -26,14 +26,11 @@ class Model implements JsonSerializable
private function initTable(): void
{
if(!$this->ro)
{
if (!$this->ro) {
if ($this->table == "") {
$this->table = $this->getDefaultTableName();
}
}
else
{
} else {
$this->table = "ReadOnlyModel";
$this->pk = "__idpk";
}
@@ -87,7 +84,7 @@ class Model implements JsonSerializable
public function find(mixed $key): mixed
{
$qb = $this->newQueryBuilder();
$qb = $this->newQueryBuilder(get_class($this));
$find = $qb->find($key);
if ($find !== null) {
$this->fillData($find->getValues());
@@ -99,9 +96,8 @@ class Model implements JsonSerializable
public function save(): bool
{
$ret = false;
if(!$this->ro)
{
$qb = $this->newQueryBuilder();
if (!$this->ro) {
$qb = $this->newQueryBuilder("");
if ($this->new) {
$query = $qb->getPreparedQuery($this->values);
$id = Connection::getInstance($this->connection)->insertQuery($query);
@@ -130,9 +126,9 @@ class Model implements JsonSerializable
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
@@ -152,10 +148,16 @@ class Model implements JsonSerializable
}
}
public static function getClassName()
{
return static::class;
}
public static function q(): QueryBuilder
{
$cls = self::getClassName();
$ist = new static();
return $ist->newQueryBuilder();
return $ist->newQueryBuilder($cls);
}
public function __get($name): mixed

View File

@@ -10,6 +10,7 @@ class QueryBuilder
protected array $orders;
protected array $groupby;
protected string $table;
protected string $classname;
protected string $connection;
protected string $pk;
protected ?int $take;
@@ -20,8 +21,9 @@ class QueryBuilder
public const MODE_AND = 0;
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->pk = $pk;
$this->connection = $connection;
@@ -208,7 +210,12 @@ class QueryBuilder
{
$ret = array();
foreach ($data as $row) {
if ($this->classname != "") {
$model = new $this->classname();
} else {
$model = new Model();
}
$ret[] = $model->setPk($this->pk)->setTable($this->table)->fillData($row);
}
return new Collection($ret);
@@ -238,8 +245,7 @@ class QueryBuilder
$this->fillData($ret);
if($where!="" && $Orwhere!="")
{
if ($where != "" && $Orwhere != "") {
$Orwhere = " OR " . $Orwhere;
}

View File

@@ -116,6 +116,8 @@ test("extending model",function()
$row = $qbs->find(1);
expect($row->id)->toBe(1);
expect($row->col1)->toBe("test");
expect($row)->toBeInstanceOf(Test::class);
});
test("order by", function(){