Страница 1 из 1

$db->addPrimaryKey() выводит на экран лог создания ключа!

Добавлено: 2022.05.22, 17:44
terrarium volition
Всем доброго дня!

Столкнулся с непонятным для меня поведением при создании первичного ключа для таблиц. На экран вываливается лог создания ключа:
> add primary key id on db_1.table1 (id) ... done (time: 0.051s) > add primary key id on db_1.table2 (id) ... done (time: 0.045s) > ...
Эти таблицы копируются в пользовательскую БД из основной БД, а далее я запускаю:

Код: Выделить всё

$db->addPrimaryKey('id', $dbname . '.' . $table, 'id');
Ключи создаются, и при рендере страницы первым делом на экран, зачем-то, вываливается лог создания ключей! :shock:
Сама страницы тоже отображается, но, понятное дело, съезжает вниз.

Уважаемые товарищи, подскажите, пожалуйста, как убрать этот ужас с экрана? :?

Re: $db->addPrimaryKey() выводит на экран лог создания ключа!

Добавлено: 2022.05.23, 00:18
ElisDN
Это печатают миграции.

Re: $db->addPrimaryKey() выводит на экран лог создания ключа!

Добавлено: 2022.05.23, 00:22
ElisDN
terrarium volition писал(а): 2022.05.22, 17:44 Уважаемые товарищи, подскажите, пожалуйста, как убрать этот ужас с экрана? :?
Сначала расскажите, зачем вам понадобилось запускать миграции на странице.

Re: $db->addPrimaryKey() выводит на экран лог создания ключа!

Добавлено: 2022.05.23, 12:51
terrarium volition
ElisDN писал(а): 2022.05.23, 00:22
terrarium volition писал(а): 2022.05.22, 17:44 Уважаемые товарищи, подскажите, пожалуйста, как убрать этот ужас с экрана? :?
Сначала расскажите, зачем вам понадобилось запускать миграции на странице.
Есть мастер-БД с предустановленными таблицами.
Есть перечень юнитов, сведённый в GridView, который может расширяться по клику "Создать".

В самом начале работы на сайте - в момент посещения страницы index, а так же, каждый раз, когда создаётся новый юнит, под юнит создаётся новая БД:

Код: Выделить всё

        $dbname = $this->getfullDBname($id);
        $db = new Databases();
        $iscreated  = $db->createDB($dbname);
, а в эту БД копируются таблицы из мастер-БД:

Код: Выделить всё

        $preconfigtables = ['Table1', 'Table2', 'Table3'];

        foreach($preconfigtables as $table){
            $liveDbName = "db_master";
            $command    = Yii::$app->preinstallDb->createCommand("CREATE TABLE IF NOT EXISTS `$dbname`.`$table` SELECT * FROM `$liveDbName`.`$table`");
            $command->execute();
        }
При копировании таблиц primaryKey то-ли не передаётся как надо, то-ли ещё чего, но я не могу скопированные таблицы отредактировать в phpmyadmin - нет чекбоксов выбора столбцов и т.д.
Хотя при этом, если я проверяю наличие primaryKey так:

Код: Выделить всё

        $model->tableSchema->primaryKey
то вижу, что primaryKey в таблице есть. Но мне от этого не легче, редактировать я таблицы не могу.
Чтобы добить вопрос я после копирования таблиц добавляю команду:

Код: Выделить всё

        Yii::$app->userDbLocator->switchId($id);

        foreach($preconfigtables as $table){
            try{
                $iscreated  = $db->addPrimaryKey('id', $dbname . '.' . $table, 'id');
            }catch(yii\db\Exception $e) { 
                $session->set('PRIMARY_KEY', 'Первичный ключ уже задан');
            }
        }

        Yii::$app->userDbLocator->switchId('master');
Происходит всё это в модели контроллера, который относится к таблице юнитов GridView.
Я вызываю эту модель из actionIndex контроллера в самом начале - в момент посещения index страницы.
В ответ - текст миграции. Но я его во view не передаю.
Как мне сделать так, чтобы создание ключа прошло потихому? :cry:

Re: $db->addPrimaryKey() выводит на экран лог создания ключа!

Добавлено: 2022.05.25, 16:53
ElisDN
terrarium volition писал(а): 2022.05.23, 12:51 В ответ - текст миграции. Но я его во view не передаю.
Как мне сделать так, чтобы создание ключа прошло потихому? :cry:
Оберните запуск буферизацией:

Код: Выделить всё

ob_start();
$isCreated  = $db->createDB($dbname);
ob_end_clean();

Re: $db->addPrimaryKey() выводит на экран лог создания ключа!

Добавлено: 2022.05.26, 10:31
terrarium volition
ElisDN писал(а): 2022.05.25, 16:53
terrarium volition писал(а): 2022.05.23, 12:51 В ответ - текст миграции. Но я его во view не передаю.
Как мне сделать так, чтобы создание ключа прошло потихому? :cry:
Оберните запуск буферизацией:

Код: Выделить всё

ob_start();
$isCreated  = $db->createDB($dbname);
ob_end_clean();
Дмитрий, спасибо Вам!