47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace DatabaseHelper\enums;
 | 
						|
use DateTime;
 | 
						|
 | 
						|
enum Type
 | 
						|
{
 | 
						|
    case INT;
 | 
						|
    case FLOAT;
 | 
						|
    case STRING;
 | 
						|
    case BOOL;
 | 
						|
    case ARRAY;
 | 
						|
    case DATE;
 | 
						|
 | 
						|
    public function valCast(mixed $value): mixed {
 | 
						|
        return match ($this) {
 | 
						|
            self::INT => (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',
 | 
						|
        };
 | 
						|
    }
 | 
						|
}
 |