Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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

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: 1

Table 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)