72 lines
2.1 KiB
PHP
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();
|
|
}
|
|
}
|