Страница 1 из 1
ALTER TABLE в миграциях
Добавлено: 2019.07.10, 10:20
Chelobaka
Здравствуйте, на рабочем проекте были созданы ряд таблиц с неправильной кодировкой. Есть ли возможность сделать миграции по смене кодировки во всех таблицы базы данных? Возможно можно запустить свой sql запрос без использования $this
В документации нашел только на смену кодировки полей.
Re: ALTER TABLE в миграциях
Добавлено: 2019.07.10, 10:31
masson
В yii\db\Schema есть имена всех таблиц БД.
Проходишь по ним циклом и выполняешь Yii::$app->db->createCommand('ALTER TABLE ... Bla-bla-bla')->execute();
Re: ALTER TABLE в миграциях
Добавлено: 2019.07.10, 16:53
Chelobaka
masson писал(а): ↑2019.07.10, 10:31
В yii\db\Schema есть имена всех таблиц БД.
Проходишь по ним циклом и выполняешь Yii::$app->db->createCommand('ALTER TABLE ... Bla-bla-bla')->execute();
Я бы и рад но yii\db\Schema не понимаю как использовать.
В документации написано публичное свойство. НО.
Код: Выделить всё
$dbSchema = new Schema();
$dbSchema->schemaNames;
Возвращает ошибку.
'yii\base\NotSupportedException' with message 'yii\db\mysql\Schema does not support fetching all schema names.'
Re: ALTER TABLE в миграциях
Добавлено: 2019.07.10, 16:57
proctoleha
Chelobaka писал(а): ↑2019.07.10, 10:20
Возможно можно запустить свой sql запрос без использования $this
Код: Выделить всё
<?php
use yii\db\Migration;
class m190710_062228_change_coming extends Migration
{
public function safeUp()
{
$sql = "ALTER TABLE `coming_document`
DROP FOREIGN KEY `fk-coming_document_shipping_number-id`;
ALTER TABLE `coming_document`
DROP `shipping_number_id`,
DROP `confirmed`;
ALTER TABLE `coming_document`
ADD `order_id` int(11) NULL AFTER `user_id`,
ADD FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`);";
$this->execute($sql);
}
public function safeDown()
{
}
}
Re: ALTER TABLE в миграциях
Добавлено: 2019.07.10, 19:32
Chelobaka
proctoleha писал(а): ↑2019.07.10, 16:57
Chelobaka писал(а): ↑2019.07.10, 10:20
Возможно можно запустить свой sql запрос без использования $this
Код: Выделить всё
<?php
use yii\db\Migration;
class m190710_062228_change_coming extends Migration
{
public function safeUp()
{
$sql = "ALTER TABLE `coming_document`
DROP FOREIGN KEY `fk-coming_document_shipping_number-id`;
ALTER TABLE `coming_document`
DROP `shipping_number_id`,
DROP `confirmed`;
ALTER TABLE `coming_document`
ADD `order_id` int(11) NULL AFTER `user_id`,
ADD FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`);";
$this->execute($sql);
}
public function safeDown()
{
}
}
Спасибо но проблема в cascade удалении. В общем делать что то в роде копирования в вспомогательную таблицу, удалять ключ, менять кодировку, заливать данные, восстанавливать ключ полный геморой. Лучше все инициализировать изначально.
Re: ALTER TABLE в миграциях
Добавлено: 2019.07.11, 08:33
masson
Выполнить команду set foreign_key_checks=0, удалить записи, потом опять вернуть =1