-
Notifications
You must be signed in to change notification settings - Fork 11
Table
Небольшая абстракция над таблицами.
Возвращает объект, связанный с указанной таблицей.
$users = $db->getTable('users'); // Надстройка над таблицей `users`
Учитываются префиксы:
$db->setPrefix('prefix_');
$users = $db->getTable('users'); // Надстройка над `prefix_users`
Объекты кэшируются:
$users = $db->getTable('users');
$users === $db->getTable('users'); // true
Библиотека никоим образом не проверяет существование таблицы:
$table = $db->getTable('nonexistent'); // ok
$table->select(); // здесь уже ошибка в запросе
$table = $db->getTable('test');
$table->getTableName(); // test
$table->getDB(); // $db
Вставляет строку, возвращает автоинкремент, если есть.
$set = [
'name' => 'Вася',
'email' => 'vasa@vasa.loc',
];
$id = $table->insert($set);
Пустой массив $set
не приводит к ошибке.
Просто ничего не происходит и возвращается NULL
.
Вставляет сразу несколько строк.
$sets = [
['name' => 'Вася', 'email' => 'vasa@vasa.loc'],
['name' => 'Петя', 'email' => 'peta@peta.loc'],
['name' => 'Гриша', 'email' => 'grisha@grisha.loc'],
];
$table->multiInsert($sets);
Если база данных поддерживает расширенный формат вставки (INSERT INTO ... VALUES (..), (..), (..)
), то используется он (например, в MySQL).
Если нет (например, SQLite) - в цикле вызывается insert()
.
Но, так как библиотека никак не определяет возможности текущего движка БД, то придётся вручную передать аргумент $imp
.
TRUE
- расширенная вставка реализована, FALSE
- нет.
Выполняют REPLACE INTO
.
Полностью аналогичны insert()
и multiInsert()
.
Выполняет UPDATE
.
Формат $where
аналогичен плейсхолдеру ?w
.
По умолчанию обновляются все строки.
На выходе количество затронутых строк.
$table->update(['x' => 1], ['id' => 5]); // UPDATE `table` SET `x`=1 WHERE `id`=5
Удаляет строки. По умолчанию все.
Формат $where
аналогичен плейсхолдеру ?w
.
$table->delete(['id' => [1, 2, 3]]); // DELETE FROM `table` WHERE `id` IN (1, 2, 3)
Возвращает количество удалённых строк.
Очищает таблицу. Не проверяет поддерживает или нет текущий движок эту команду.
Выполняет COUNT()
на таблице.
$table->getCount(); // SELECT COUNT(1) FROM `table` - общее количество строк в таблице
$table->getCount('a'); // SELECT COUNT(`a`) ... - где a не NULL
$table->getCount(null, ['x' => 1]); // количество строк, где `x`=1
Все параметры не обязательны.
$table->select(); // выбор всего в неизвестном порядке
$table->select('a', ['id' => 5]); // SELECT `a` FROM `table` WHERE `id`=5
$table->select(['a', 'b'], ['id' => [1, 2]]); // SELECT `a`,`b` FROM `table` WHERE `id` IN (1, 2)
$cols
- см. формат COLS.
$where
- см. формат WHERE.
$order
- массив: столбец => TRUE
(ASC), FALSE
(DESC) или имя столбца для ASC:
$table->select($cols, $where, 'col'); // ... ORDER BY `col` ASC
$table->select($cols, $where, ['a' => true, 'b' => false]); // ... ORDER BY `a` ASC, `b` DESC
$limit
: скаляр или массив [$offset, $limit]
:
$table->select($cols, $where, $order, 5); // ... LIMIT 0, 5
$table->select($cols, $where, $order, [5, 10]); // ... LIMIT 5, 10
Во всех значениях null приводится к NULL
, а не к 0 или пустой строке.