Пакет · cdo

API CDO

CDO extends PDO, добавляя методы DML ниже. Всё остальное — query, prepare, fetch*, транзакции, атрибуты — унаследовано от PDO без изменений. Каждый метод здесь бросает CDOException при сбое, оборачивая исходный PDOException.

Идентификаторы квотируются, значения привязываются

Значения привязываются как параметры подготовленного запроса. Имена таблиц и колонок — которые привязать нельзя — квотируются символами кавычек драйвера ("…" для PostgreSQL/Oracle, `…` для MySQL/MariaDB), поэтому эти методы DML безопасны даже с динамически собранными именами. Поскольку квотированные идентификаторы в PostgreSQL регистрозависимы, передавайте имена ровно так, как они существуют в схеме (users, а не Users). Это квотирование действует только в методах CDO — имена колонок, переданные в Qb, не квотируются.

Создание

Вы редко создаёте CDO напрямую — за вас это делает ConnectionPool. Конструктор:

php
public function __construct(
  DbConfigInterface $config,
  int $timeout = 5,
  bool $debug = false
)
Параметр Тип По умолчанию Описание
config DbConfigInterface Конфиг соединения (учётные данные, драйвер, логгер)
timeout int 5 Тайм-аут соединения в секундах (PDO::ATTR_TIMEOUT)
debug bool false При true устанавливает PDO::ERRMODE_EXCEPTION

getDriverName

php
public function getDriverName(): string

Возвращает нормализованный драйвер: 'pgsql', 'mysql', 'mariadb' или 'oci'. В отличие от PDO::ATTR_DRIVER_NAME, различает MariaDB и MySQL — см. Определение драйвера.

insert

php
final public function insert(string $table, object|array $entity): mixed

Вставляет одну строку и возвращает сгенерированный первичный ключ.

Параметр Тип Описание
table string Имя таблицы
entity `object\ array`
  • Возвращает первичный ключ — значение первого ключа сущности, прочитанное через RETURNING (PostgreSQL/MariaDB) или lastInsertId() (MySQL). Возвращает null, когда нет сгенерированного id для сообщения.
  • Значения null в entity исключаются из INSERT.
  • Бросает CDOException при сбое запроса.

insertGroup

php
final public function insertGroup(
  string $table,
  array $entities,
  int $chunkSize = 1000
): void

Пакетно вставляет много строк как чанкованные многострочные INSERT.

Параметр Тип По умолчанию Описание
table string Имя таблицы
entities array Массив массивов/объектов
chunkSize int 1000 Строк на один INSERT
  • Возвращает ничего. Пустой массив entities — no-op.
  • Значения null в отдельных строках исключаются. Бросает CDOException при сбое.

upsert

php
final public function upsert(
  string $table,
  object|array $entity,
  array $conflictColumns,
  ?array $updateColumns = null
): mixed

Вставляет строку либо обновляет/игнорирует её при уникальном конфликте.

Параметр Тип По умолчанию Описание
table string Имя таблицы
entity `object\ array`
conflictColumns array Колонка(и), определяющие уникальность
updateColumns `array\ null` null
  • Возвращает первичный ключ на PostgreSQL (через RETURNING); на MySQL/MariaDB возвращает lastInsertId() (null, если новая строка не была вставлена).
  • Бросает CDOException, если conflictColumns пуст, или при сбое запроса.
  • Токены выражений :new / :current — см. Плейсхолдеры апсерта.

upsertGroup

php
final public function upsertGroup(
  string $table,
  array $entities,
  array $conflictColumns,
  ?array $updateColumns = null,
  int $chunkSize = 500
): void

Пакетный апсерт с чанкованием.

Параметр Тип По умолчанию Описание
table string Имя таблицы
entities array Массив массивов/объектов
conflictColumns array Колонка(и), определяющие уникальность
updateColumns `array\ null` null
chunkSize int 500 Строк на запрос
  • Возвращает ничего. Пустой entities ⇒ no-op; пустой conflictColumns ⇒ бросает исключение.

update

php
final public function update(string $table, object|array $entity, Qb $qb): int

Обновляет строки, соответствующие условию Qb.

Параметр Тип Описание
table string Имя таблицы
entity `object\ array`
qb Qb Условие для секции WHERE
  • Возвращает число затронутых строк (rowCount()).
  • Бросает CDOException при сбое.

delete

php
final public function delete(string $table, Qb $qb): int

Удаляет строки, соответствующие условию Qb.

Параметр Тип Описание
table string Имя таблицы
qb Qb Условие для секции WHERE
  • Возвращает число удалённых строк. Бросает CDOException при сбое.

applyDatabaseTimezone

php
public function applyDatabaseTimezone(mixed $driver, string $tz): void

Устанавливает часовой пояс сессии в соответствие с PHP. Вызывается автоматически при подключении; открыт как публичный, чтобы можно было переприменить его после сброса на уровне драйвера. Поведение по драйверам описано в Определении драйвера.

Только запись; чтение остаётся PDO

Здесь намеренно нет select / find. Читайте унаследованными методами PDO и фрагментом Qb для WHERE.

Связанное