9 * Handles the creation of table `{{%models}}`.
10 * Has foreign keys to the tables:
14 class m201103_133111_create_models_table extends Migration
19 public function safeUp()
21 $table = Models::tableName();
23 $this->createTable($table, [
25 'name' => $this->string()->unique()->notNull()->comment('Наименование предмета/оборудования'),
26 'type_id' => $this->integer()->notNull()->comment('Идентификатор типа'),
27 'modelnumber' => $this->string()->comment('Номер модели'),
28 'product' => $this->string()->comment('Код оборудования'),
31 $this->addCommentOnTable($table, 'Список наименований предметов/оборудования');
38 // Создания индекса для колонки `type_id`
45 // Добавление реляционной связи с таблицей типов `{{%type}}`
55 // Добавление поля в таблицу предметов/оборудования
56 $itemsName = Items::tableName();
58 $this->addColumn($itemsName, 'model_id', $this->integer()->comment('Идентификатор модели'));
59 // Добавление индекса для колонки 'model_id'
66 // Добавление реляционной связи с таблицей моделей '{{%models}}'
76 // Миграция записей моделей из таблицы предметов/оборудования в таблицу моделей
77 $items = Items::find()->all();
78 foreach($items as $row)
80 $model = Models::find()->where(['name' => $row->model])->all();
81 if (count($model) > 0)
83 $this->update($itemsName, [ 'model_id' => $model[0]->id ], [ 'id' => $row->id ]);
87 $model = new Models();
88 $model->name = $row->model;
89 $model->modelnumber = $row->modelnumber;
90 $model->product = $row->product;
91 $model->type_id = $row->type_id;
92 if ($model->validate() && $model->save())
94 $this->update($itemsName, [ 'model_id' => $model->id ], [ 'id' => $row->id ]);
98 echo Yii::t('models', 'Migration: error add model: ') . print_r($model->errors(), TRUE);
103 $this->alterColumn($itemsName, 'model_id', $this->integer()->notNull()->comment('Идентификатор модели'));
104 // Удаление ненужных колонок
105 $this->dropColumn($itemsName, 'model');
106 $this->dropColumn($itemsName, 'modelnumber');
107 $this->dropColumn($itemsName, 'product');
108 // Удаление связи таблиц оборудования и типов
109 $this->dropForeignKey('fk-items-types-id', $itemsName);
110 // Удаление индекса поля типов в таблице оборудования
111 $this->dropIndex('idx-items-types', $itemsName);
112 // Удаление поля типов в таблице оборудования
113 $this->dropColumn($itemsName, 'type_id');
119 public function safeDown()
122 echo Yii::t('app', 'Migration {migrate} can\'t reverted', ['migrate' => 'm201103_133111_create_models_table']);
125 $table = Models::tableName();
127 // drops foreign key for table `{{%type}}`
128 $this->dropForeignKey(
133 // drops index for column `type_id`
135 'idx-models-type_id',
138 $this->dropPrimaryKey(
143 $this->dropTable($table);