WP-Query-Builder/enums/ColumnTypes.php

47 lines
1.4 KiB
PHP
Raw Normal View History

2025-01-27 19:35:17 +01:00
<?php
namespace DatabaseHelper\enums;
use DateTime;
2025-01-27 19:35:17 +01:00
enum ColumnTypes
{
case INT;
case FLOAT;
case STRING;
case BOOL;
case ARRAY;
case DATE;
public function valCast(mixed $value): mixed {
2025-01-27 19:35:17 +01:00
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),
2025-01-27 19:35:17 +01:00
};
}
public function dbCast(mixed $value): mixed {
return match ($this) {
self::INT => intval($value),
self::FLOAT => floatval($value),
2025-02-05 15:40:52 +01:00
self::STRING => esc_sql($value),
self::BOOL => filter_var($value, FILTER_VALIDATE_BOOLEAN) ? "TRUE" : "FALSE",
self::ARRAY => json_encode($value),
2025-02-05 15:40:52 +01:00
self::DATE => $value instanceof DateTime ? $value->format('Y-m-d H:i:s') : json_encode($value)
};
2025-01-28 16:53:37 +01:00
}
2025-02-05 15:40:52 +01:00
public function toString(): string {
2025-01-27 19:35:17 +01:00
return match ($this) {
self::INT => 'INTEGER',
self::FLOAT => 'FLOAT',
self::STRING => 'VARCHAR(255)',
self::BOOL => 'BOOLEAN',
self::ARRAY => 'JSON',
self::DATE => 'DATETIME',
};
}
}