dbms_primeidc/extdbms/lib/Core/Model.php
2025-04-08 19:33:34 +09:00

72 lines
2.1 KiB
PHP

<?php
namespace lib\Core;
use lib\Database\DB;
use lib\Database\QueryBuilder;
abstract class Model
{
private bool $_debug = false;
protected static QueryBuilder $queryBuilder;
public function __construct() {} //
abstract public function getTable(): string;
abstract public function getPKField(): string;
abstract public function getTitleField(): string;
final public function setDebug(bool $debug): void
{
$this->_debug = $debug;
}
final public function getDebug(): bool
{
return $this->_debug;
}
public static function query(): QueryBuilder
{
if (!isset(self::$queryBuilder)) {
self::$queryBuilder = new QueryBuilder(pdo: DB::getPDO()); // Assuming DB::getPDO() gives PDO instance
}
return self::$queryBuilder->table((new static())->getTable());
}
public static function all(): array
{
return self::query()->get();
}
public static function find($id): ?array
{
return self::query()->where((new static())->getPKField(), '=', $id)->first();
}
public static function where(string $column, string $operator = "", mixed $value = ""): QueryBuilder
{
return self::query()->where($column, $operator, $value);
}
public static function whereNotIn(string $column, array $values): QueryBuilder
{
return self::query()->whereNotIn($column, $values);
}
public static function orWhereIn(string $column, array $values): QueryBuilder
{
return self::query()->orWhereIn($column, $values);
}
public static function count(): int
{
return self::query()->count();
}
public static function insert(array $data): bool
{
return self::query()->insert($data);
}
public static function updateById($id, array $data): bool
{
return self::query()->where((new static())->getPKField(), '=', $id)->update($data);
}
public static function deleteById($id): bool
{
return self::query()->where((new static())->getPKField(), '=', $id)->delete();
}
}