(int) $value, self::FLOAT => (float) $value, self::STRING => (string) $value, self::BOOL => filter_var($value, FILTER_VALIDATE_BOOLEAN), self::ARRAY => is_array($value) ? $value : (json_decode($value, true) ?? []), self::DATE => $value instanceof DateTime ? $value : (strtotime($value) ? new DateTime($value) : null), }; } public function dbCast(mixed $value): mixed { return match ($this) { self::INT => intval($value), self::FLOAT => floatval($value), self::STRING => esc_sql($value), self::BOOL => filter_var($value, FILTER_VALIDATE_BOOLEAN) ? "TRUE" : "FALSE", self::ARRAY => json_encode($value), self::DATE => $value instanceof DateTime ? $value->format('Y-m-d H:i:s') : json_encode($value) }; } public function toString(): string { return match ($this) { self::INT => 'INTEGER', self::FLOAT => 'FLOAT', self::STRING => 'VARCHAR(255)', self::BOOL => 'BOOLEAN', self::ARRAY => 'JSON', self::DATE => 'DATETIME', }; } }