Здравствуйте, на рабочем проекте были созданы ряд таблиц с неправильной кодировкой. Есть ли возможность сделать миграции по смене кодировки во всех таблицы базы данных? Возможно можно запустить свой sql запрос без использования $this
В документации нашел только на смену кодировки полей.
ALTER TABLE в миграциях
Re: ALTER TABLE в миграциях
В yii\db\Schema есть имена всех таблиц БД.
Проходишь по ним циклом и выполняешь Yii::$app->db->createCommand('ALTER TABLE ... Bla-bla-bla')->execute();
Проходишь по ним циклом и выполняешь Yii::$app->db->createCommand('ALTER TABLE ... Bla-bla-bla')->execute();
Re: ALTER TABLE в миграциях
Я бы и рад но yii\db\Schema не понимаю как использовать.
В документации написано публичное свойство. НО.
Код: Выделить всё
$dbSchema = new Schema();
$dbSchema->schemaNames;
'yii\base\NotSupportedException' with message 'yii\db\mysql\Schema does not support fetching all schema names.'
- proctoleha
- Сообщения: 298
- Зарегистрирован: 2016.07.10, 19:00
Re: ALTER TABLE в миграциях
Код: Выделить всё
<?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 в миграциях
Спасибо но проблема в cascade удалении. В общем делать что то в роде копирования в вспомогательную таблицу, удалять ключ, менять кодировку, заливать данные, восстанавливать ключ полный геморой. Лучше все инициализировать изначально.proctoleha писал(а): ↑2019.07.10, 16:57Код: Выделить всё
<?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 в миграциях
Выполнить команду set foreign_key_checks=0, удалить записи, потом опять вернуть =1