Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/andy87/yii2-migrate-architect
Yii2 extension. Migration helper
https://github.com/andy87/yii2-migrate-architect
interface migration yii2
Last synced: about 6 hours ago
JSON representation
Yii2 extension. Migration helper
- Host: GitHub
- URL: https://github.com/andy87/yii2-migrate-architect
- Owner: andy87
- Created: 2024-06-28T06:30:51.000Z (3 months ago)
- Default Branch: master
- Last Pushed: 2024-09-12T06:25:52.000Z (15 days ago)
- Last Synced: 2024-09-18T22:09:14.137Z (9 days ago)
- Topics: interface, migration, yii2
- Language: PHP
- Homepage:
- Size: 71.3 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Yii2 migrate architect
Yii2 migrate architect - библиотека для фреймворка Yii2 упрощающая написание кода миграций.
Цель: сделать простой и быстрый инструмент добавления миграций.
### Содержание:
- [Установка](#yii2-migrate-architect-setup)
- [Использование](#yii2-migrate-architect-use)___
УстановкаТребования
- php >=8.0
- Yii2
Composer## Добавление пакета в проект
Используя: консольные команды. (Предпочтительней)
- используя composer, установленный локально
```bash
composer require andy87/yii2-migrate-architect
````
- используя composer.phar
```bash
php composer.phar require andy87/yii2-migrate-architect
```
**Далее:** обновление зависимостей `composer install`Используя: файл `composer.json`
Открыть файл `composer.json`
В раздел, ключ `require` добавить строку
`"andy87/yii2-migrate-architect": "*"`
**Далее:** обновление зависимостей `composer install`- - - - -
В конфигурационном файле `config/console.php` добавить контроллер:
`andy87\yii2\architect\components\controllers\ArchitectController`
```php
use andy87\yii2\architect\components\controllers\ArchitectController;return [
// ...
'controllerMap' => [
// ...
'architect' => ArchitectController::class,
// ...
],
// ...
];```
Пример с кастомизацией:
- **directoryTemplateMigrations** _путь к шаблонам миграций_
- **migrateTemplateMapping** _маппинг шаблонов миграций_
- **snippetsMigrationFilename** _шаблоны имён файлов миграции_```php
use andy87\yii2\architect\components\controllers\ArchitectController;return [
// ...
'controllerMap' => [
// ...
'architect' => [
'class' => ArchitectController::class,
'directoryTemplateMigrations' => '@app/path/to/migrations/template/',
'migrateTemplateMapping' => [
ArchitectController::SCENARIO_COLUMN_ADD => 'create_table_template',
ArchitectController::SCENARIO_UPDATE => 'update_table_template',
//,,,
],
'snippetsMigrationFilename' => [
ArchitectController::SCENARIO_COLUMN_ADD => 'create_table__%s',
ArchitectController::SCENARIO_UPDATE => 'update_table__%s',
//,,,
]
],
// ...
],
// ...
];
```
___## Использование
Консольная команда:
```bash
php yii architect
```
Запускает интерактивное меню для:
- запуска миграций
- создания миграций
- с предустановленными шаблонами миграций использующих базовые классы:
- `andy87\yii2\architect\CreateTable`
- `andy87\yii2\architect\UpdateTable````
> php yii architect
Yii Migration Tool (based on Yii v2.0.51-dev)Select action:
1. Create migration
2. Apply migrations
3. Down migrations
4. Run migrations
0. Exit
--------------------
variant: 2
`Create migration`:
1. Create table
2. Update column
3. Add column
4. Rename column
5. Remove column
0. Exit
--------------------
action: 1Table name: product
Create new migration '../console/migrations\m240628_072029_create_table__product.php'? (yes|no) [no]:y
New migration created successfully.```
___
## Простые примеры миграций
### CreateTable.
#### Создание таблицы
Колонки: `id`, `created_at`, `updated_at` создадутся автоматически
```php
'id', // fk--role-module_id--module-id
'sub_module_id' => ['module' => 'id'], // fk--role-sub_module_id--module-id
];/**
* @return array
*/
public function columns(): array
{
return [
'status' => $this->smallInteger()->notNull()->defaultValue(10),
'key' => $this->string(32)->notNull()->unique(),
'name' => $this->string(64)->notNull()->unique(),
'priority' => $this->integer(4)->defaultValue(1),
'module_id' => $this->integer(4)->notNull(),
'sub_module_id' => $this->integer(4)->notNull(),
];
}
}
```
Отмена создания колонок, происходит через назначение значения `false` или `null` для колонки.
Для примера: `id`, `updated_at` не будут созданы
```php
false,
'text' => $this->string(32)->notNull()->unique(),
self::COLUMN_UPDATED_AT => null,
];
}
}
```### UpdateTable.
#### Добавление колонки
Для добавления колонки, необходимо переопределить метод `columnsListAdd`, вернув массив с описанием колонок.
```php
$this->string()->defaultValue(null)
];
}
}
```#### Добавление колонок и внешних ключей
Для добавления колонок и внешних ключей, необходимо переопределить методы `columnsListAdd` и `foreignKeyList`, вернув массивы с описанием колонок и внешних ключей.
```php
'id', // fk--category-user_id--user-id
'author_id' => ['user' => 'id'], // fk--category-author_id--user-id
'parent_id' => ['category' => 'id'], // fk--category-parent_id--category-id
];
/**
* Список колонок для добавления
*
* @return array
*/
public function columnsListAdd(): array
{
return [
'user_id' => $this->integer(8)->notNull(),
'author_id' => $this->integer(8)->notNull()->after('user_id'),
'parent_id' => $this->integer(8)->null()->after('id'),
];
}
}
```#### Редактирование таблицы
Для редактирования колонки, необходимо переопределить метод `columnsListUpdate`, вернув массив с описанием колонок.
```php
$this->string(64)->notNull()->unique(),
'author_id' => $this->integer(4)->notNull()->unique(),
];
}
}
```#### Переименование колонки
Для переименования колонки, необходимо переопределить свойство `renameColumnList`, вернув массив с мэппингом старых и новых названий колонок.
```php
'price',
'new_price' => 'price_new',
];
}
```
#### Удаление колонок
Для удаления колонок, необходимо переопределить свойство `removeColumnList`, вернув массив с названиями колонок для удаления в ключе, а в значении массив указывающий на связи через внешние ключи.
```php
null,
'property' => null,
'user_id' => ['user' => 'id'],
];
}
```[Packagist](https://packagist.org/packages/andy87/yii2-migrate-architect)