2016-08-03 7 views
2

У меня есть команда migrate:s, которая содержит следующуюМиграция нескольких баз данных с Laravel Artisan

public function handle() 
{ 

    $sites = Sites::all(); 


    foreach($sites as $site) 
    { 
     $host  = $site->h; 
     $database = $site->d; 
     $username = $site->u; 
     $password = $site->p; 

     $this->info('Trying to migrate ' . $database); 

     Config::set('database.connections.mysql.host',  $host); 
     Config::set('database.connections.mysql.database', $database); 
     Config::set('database.connections.mysql.username', $username); 
     Config::set('database.connections.mysql.password', $password); 

     //Reconnect with new credentials 
     DB::reconnect('mysql'); 

     //Call the migration on the new connection 
     $this->call('migrate'); 

     $this->info('Migrations complete for database ' . $site->d); 
    } 
} 

Первый сайт всегда мигрирует хорошо, однако после того, как он продолжает пытаться создать таблицу миграции, несмотря на то, уже будучи один, тот, который заполняется.

SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'migrations' already exists 

Полномочия являются правильными для баз данных, я не могу понять, почему он пытается сделать таблицу после первой миграции.

+0

Вы можете посмотреть/разместить содержимое своей таблицы миграции на каждом сайте? Мне интересно, если он вышел из синхронизации, поэтому он думает, что он не выполнил миграцию, чтобы создать таблицу миграции? Кроме того, какая версия Laravel вы? – Loren

+0

@Loren 5.1, таблица миграции заполнена, я сбросил базу данных, с чистой установки, она всегда работает на первом. Похоже, что сейчас играя вокруг, кажется, что это не синхронизация учетных данных по какой-то причине. – Ian

ответ

1

Просто подумайте, может быть, функция вызова -> как-то повторно инициализирует часть Laravel, или, по крайней мере, это мое лучшее предположение. Если у вас есть сайт как соединение с базой данных (например, mysql1, mysql2, mysql3 и т. Д.), Вы можете попробовать использовать параметр -database для миграции для запуска миграции и посмотреть, помогает ли это?

Команда мигрирует имеет опцию для выбора подключения к базе данных:

https://github.com/laravel/framework/blob/5.1/src/Illuminate/Database/Console/Migrations/MigrateCommand.php

+0

Пробовал, все тот же результат, что и базовая таблица, не найдена. – Ian

2

Вопрос заключается в том, что настройки были кэшируются, поэтому первое соединение работает, так что вам нужно, чтобы очистить соединение с помощью

DB::purge('connectionName'); 
Смежные вопросы