HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/limestate-api/lib/dblib/DbModel.php
<?php
/**
 * Модель для работы с БД
 */
class Db_Model
{
    /** @var iDb_Driver */
    static $db = null;
    static $table_name = '';
    static $cache = array();

    /**
     * Возвращает идентификатор созданного объекта или массив идентификаторов
     *
     * @param array массив содержащий данные для сохранения в базу
     * @param bool $returning возвращать идентификатор
     * @return int|array
     */
    public static function create($data, $returning = false)
    {
        return self::$db->insert(static::$table_name, array_keys($data), [array_values($data)], $returning);
    }

    /**
     * Возвращает количество записей по условию
     *
     * @param array|string $where условие
     * @param string $server сервер БД read|write
     * @return int
     */
    public static function count($where = array(), $server = null)
    {
        $query = self::$db->select('COUNT(id)')->from(static::$table_name);
        if ($where) {
            if (is_array($where)) {
                $query->where(self::$db->prepareWhere($where));
            } else if (is_string($where) ) {
                $query->where($where);
            }
        }
        return (int) $query->fetchOne($server);
    }

    /**
     * Возвращает объект записи по идентификатору
     *
     * @param int $id идентификатор записи
     * @param string $server сервер БД read|write
     * @return object|bool
     */
    public static function find($id, $server = null)
    {
        if (!$id = (int) $id) {
            return false;
        }
        if ($server === Db_Driver::SERVER_WRITE || !($result = static::findFromCache($id))) {
            $query = self::$db->select()->from(static::$table_name)->where('id = ?', $id);
            $result = static::$cache[static::$table_name][$id] = $query->fetchRow($server);
        }
        return $result ? : false;
    }

    public static function exists($id, $server = null)
    {
        if (!$id = (int) $id) {
            return false;
        }

        return (bool) self::$db->select('1')->from(static::$table_name)->where('id = ?', $id)->fetchOne();
    }

    /**
     * Возвращает объект записи из кэша по идентификатору, либо false если запись отсутствует - false
     *
     * @param int $id идентификатор запись
     * @return object|bool
     */
    private static function findFromCache($id)
    {
        // todo: implement cache!
        return false; //isset(static::$cache[static::$table_name][$id]) ? static::$cache[static::$table_name][$id] : false;
    }

    /**
     * Возвращает массив объектов записей
     *
     * @param string $sql запрос
     * @param array $values массив значений, подставляющийся в запрос
     * @param string $server сервер БД read|write
     * @return array
     */
    public static function find_by_sql($sql, $values = null, $server = null)
    {
        if ($values !== null && is_array($values) && !empty($values)) {
            self::$db->prepareData($sql, $values);
        }
        return self::$db->fetchAll($sql, $server);
    }

    /**
     * Возвращает объект первой записи соотв. запросу
     *
     * @param string $sql запрос
     * @param array $values массив значений, подставляющийся в запрос
     * @param string $server сервер БД read|write
     * @return object
     */
    public static function first($sql, $values = null, $server = null)
    {
        if ($values !== null && is_array($values) && !empty($values)) {
            self::$db->prepareData($sql, $values);
        }
        $result = self::$db->fetchRow($sql, $server);
        return $result;
    }

    /**
     * Выполняет запрос в БД
     *
     * @param string $sql запрос
     * @param array $values массив значений, подставляющийся в запрос
     * @param string $server сервер БД read|write
     * @return mixed
     */
    protected static function query($sql, $values = null, $server = null)
    {
        if ($values !== null && is_array($values) && !empty($values)) {
            self::$db->prepareData($sql, $values);
        }
        return self::$db->query($sql, $server);
    }

    /**
     * Обновляет записи по условию. Возвращает кол-во обновленных записей.
     *
     * @param array $data массив данных обновляемых записей, где ключ - столбец, а значение - значение
     * @param array|string $where массив или строка условий
     * @return int
     */
    public static function update($data, $where)
    {
        return self::$db->update(static::$table_name, $data, $where);
    }

    /**
     * Удаляет записи по условию
     *
     * @param array|string $where массив или строка условий
     * @param bool $returning возвращать удаленные записи
     * @return bool|array
     */
    protected static function delete($where, $returning = false)
    {
        return self::$db->delete(static::$table_name, $where, $returning);
    }

}