Download the PHP package illusiard/yii2-db-toolkit without Composer
On this page you can find all versions of the php package illusiard/yii2-db-toolkit. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package yii2-db-toolkit
illusiard/yii2-db-toolkit
Yii2 DB toolkit — набор инфраструктурных утилит для работы с БД на уровне миграций и DDL.
Пакет даёт синтаксический и архитектурный сахар для создания таблиц, индексов и внешних ключей, а также небольшие вспомогательные инструменты для унификации миграций между PostgreSQL и MySQL. Использование позволяет просто заводить новые таблицы, получая единую стилистику, на которую можно опираться при дальнейшем проектировании.
What's included
-
CreateTable— базовый класс миграции для создания таблиц:- автоматические дефолтные колонки:
id,created_at,updated_at,is_active(можно отключать черезfalse) - декларативное описание индексов и внешних ключей
- автоматическое создание индекса под каждый внешний ключ
onDelete/onUpdateдля FK (с валидацией значений)- авто-создание FK-колонки при отсутствии в
getColumns()
- автоматические дефолтные колонки:
-
ForeignKeyDTO— DTO для применения FK внутриCreateTable -
BaseDictionaryCreateTableMigration— базовая миграция “таблица-справочник”:- колонки:
code,name,description - unique индекс на
code
- колонки:
-
SchemaIntrospector(read-only) — библиотечная интроспекция схемы БД:- DTO:
SchemaDTO,TableDTO,ColumnDTO,IndexDTO,ForeignKeyDTO - сбор таблиц/PK/columns/indexes/foreignKeys/comments
- поддержка SQLite (
PRAGMA) и общая ветка для остальных драйверов
- DTO:
- Функции-утилиты:
- генерация имён idx/fk
- нормализация конфигов
- дефолтные поля
- (опционально) провайдеры/разделение логики по драйверу (PG/MySQL)
What's NOT included
- сущности / ActiveRecord
- meta-layer BES
Requirements
- PHP >= 8.5
- yiisoft/yii2 ^2.0.55
Installation
Quick start
CreateTable
Создайте миграцию, унаследовавшись от CreateTable:
Disabling default columns
Любую дефолтную колонку можно отключить, вернув false по соответствующему ключу:
BaseDictionaryCreateTableMigration
Отдельно выделен класс для создания таблиц-словарей.
SchemaIntrospector (read-only)
Интроспекция работает с любым yii\db\Connection:
Формат данных для endpoint-слоя:
SchemaDTO::toArray()->{tables:[...], driver, serverVersion?}TableDTO::toDetailsArray()->table,primaryKey, optionalprimaryKeyName,columns,indexes,foreignKeys
Schema tooling
Для схемного синка доступны четыре шага:
SchemaIntrospector:Connection -> SchemaDTO(текущая схема)SchemaParser:array -> SchemaDTO(желаемая схема)SchemaDiffService:current + desired -> SchemaDiffResult(actions в безопасном порядке)MigrationGeneratorService:SchemaDiffResult -> MigrationCodeResult(php-код миграции)
Минимальный пример desired schema:
primaryKey не зависит от типа колонки: schema diff создаёт и удаляет PK constraint отдельными actions.
Для PostgreSQL можно использовать native uuid; для MySQL/MariaDB — выбранное приложением строковое или бинарное представление, например char(36). Составные PK поддерживаются тем же массивом primaryKey.
Ошибки endpoint-слоя (например в BES) остаются на стороне контроллера:
- несуществующая таблица:
404 {error:{type:"not_found",table:"..."}} - невалидное имя таблицы:
400 {error:{type:"bad_request",...}}
Tests
Есть unit-тесты (SQLite in-memory) и интеграционные тесты (реальные БД в Docker).
Launching the database
Environment variables
Пример .env (используется тестами):
DB_DRIVER=pgsqlилиDB_DRIVER=mysql- PostgreSQL:
DB_PG_HOST,DB_PG_PORT,DB_PG_NAME,DB_PG_USER,DB_PG_PASS - MySQL:
DB_MY_HOST,DB_MY_PORT,DB_MY_NAME,DB_MY_USER,DB_MY_PASS
Running tests
Unit (SQLite in-memory):
PostgreSQL:
MySQL:
LICENCE
BSD-3-Clause