Compare commits

..

4 Commits

View File

@@ -31,7 +31,7 @@ class Model
/**
* @var array Attributes to ignore when saving to the database.
*/
protected static array $dbIgnoreSave = ['id'];
protected static array $dbIgnoreSave = [];
/**
* @var array Attributes that should be explicitly saved, even if private/protected.
@@ -321,7 +321,7 @@ class Model
}
/**
* Handles type casting for properties, especially for Enums.
* Handles type casting for properties
*
* @param ReflectionProperty $property
* @param mixed $value
@@ -331,16 +331,25 @@ class Model
protected static function castValue(ReflectionProperty $property, mixed $value): mixed
{
$type = $property->getType();
if (!$type || !enum_exists($typeName = $type->getName())) {
if (!$type) {
return $value;
}
if (method_exists($typeName, 'tryFrom')) {
return $typeName::tryFrom($value);
$typeName = $type->getName();
// Enum cast
if (enum_exists($typeName)) {
if (method_exists($typeName, 'tryFrom')) {
return $typeName::tryFrom($value);
}
if (in_array($value, array_column($typeName::cases(), 'name'))) {
return $typeName::{$value};
}
}
if (in_array($value, array_column($typeName::cases(), 'name'))) {
return $typeName::{$value};
// DateTime cast
if (is_subclass_of($typeName, \DateTimeInterface::class)) {
return $value ? new $typeName($value) : null;
}
return $value;
@@ -391,6 +400,10 @@ class Model
return $value->value ?? $value->name;
}
if ($value instanceof \DateTimeInterface) {
return $value->format('Y-m-d H:i:s');
}
return $value;
}
@@ -467,12 +480,8 @@ class Model
$set = [];
foreach ($atts as $key => $value) {
if ($value !== null) {
$set[] = "$key=:$key";
static::$dbQueryVariables[':' . $key] = $value;
} else {
$set[] = "$key=NULL";
}
$set[] = "$key=:$key";
static::$dbQueryVariables[':' . $key] = $value;
}
$table = static::table();
@@ -498,11 +507,9 @@ class Model
static::$dbQueryVariables = [];
foreach ($atts as $key => $value) {
if (isset($value)) {
$into[] = "$key";
$values[] = ":$key";
static::$dbQueryVariables[":$key"] = $value;
}
$into[] = "$key";
$values[] = ":$key";
static::$dbQueryVariables[":$key"] = $value;
}
$table = static::table();
@@ -510,7 +517,7 @@ class Model
static::query($sql);
$pk = static::$dbPrimaryKey;
$this->$pk = $db->lastInsertId();
$this->$pk ??= $db->lastInsertId();
$this->markAsSaved();
}