-
Notifications
You must be signed in to change notification settings - Fork 11
FakeTable
Тестовый "движок" таблицы. Работает с массивом в памяти.
Экземпляр Table может быть надстройкой над именем таблицы, тогда все запросы идут к БД.
Либо надстройкой над FakeTable
, тогда все запросы идут через неё.
Адаптер fake
является фейковой базой данных.
Единственный запрос, который он понимает: SHOW TABLES
.
На все остальные выкидывает эксепшн.
$db->getTable($name)
возвращает фейковые таблицы.
Их начальное состояние описывается в параметрах подключения.
$params = [
'_adapter' => 'fake',
'tables' => [
'users' => [
'data' => [
['id' => 1, 'email' => 'one@localhost', 'status' => 'active'],
['id' => 2, 'email' => 'two@localhost', 'status' => 'banned'],
],
'defaults' => [
'status' => 'active',
],
'pk' => 'id',
'lastAI' => true,
],
],
];
$db = \go\DB\DB::create($params);
$db->getTable('users')->select(['id', 'status'])->vars(); // 1 => active, 2 => banned
Обязательный параметр подключения - tables
.
Список таблиц в виде имя таблицы
=> параметры
.
Список параметров дан ниже, единственный обязательный - data
.
$db->getTable($tableName);
Если вместо $tableName
передан экземпляр FakeTable
, то вне зависимости от адаптера базы, возвращается надстройка над этой таблицей.
Например, в конфиге какого-то модуля прописано имя таблицы, по которому в недрах этого модуля получается сама таблица.
$config = [
// ...
'table' => 'users',
];
// Внутри модуля:
$table = $this->db->getTable($this->config['table']);
Можно подменить таблицу, не влезая в код модуля, просто передав ему исправленный конфиг:
use go\DB\Fakes\FakeTable;
$fake = new FakeTable($data, $defaults, $pk, $lastAI);
$config = [
// ...
'table' => $fake,
];
Список изначально существующих "записей" в таблице. Порядковый массив ассоциативных массивов.
Структура нигде не указывается.
Если select()
не находит в очередной записи нужного столбца, он возвращает NULL.
Если указан, то insert()
и replace()
берут отсюда значения по умолчанию для неуказанных полей.
Первичный ключ. Строка (один столбец) или массив имён столбцов.
Используется для автоинкремента, для replace()
и для проверки целостности после insert()
.
Последний автоинкремент.
NULL
- нет автоинкремента.
TRUE
- берётся максимальное значение автоинкрементного столбца из data
.
pk
при этом должен содержать один столбец.
Аналогичные Table:
- insert(array $set): int
- multiInsert(array $sets)
- replace(array $set): int
- multiReplace(array $sets)
- update(array $set, mixed $where): int
- select($cols, $where, $order, $limit): Result
- delete($where): int
- getCount($col, $where): int
"Транзакции":
- begin()
- commit()
- rollback()
Информационные:
- getData()
- getLastIncrement()
Логи (в логи пишутся "запросы"):
- getLogs(): string[]
- resetLogs()
- log(string $message) - добавить свой лог
Из FakeDB получить таблицы можно следующим способом:
$fakeEngine = $db->getImplementation();
$table = $fakeEngine->getTable('name');
$allTables = $fakeEngine->getListTables();