使用Laravel Artisan迁移多个数据库

时间:2016-08-03 21:42:04

标签: php database laravel database-migration artisan

我的命令migrate:s包含以下内容

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

凭据对于数据库是正确的,我无法弄清楚为什么它试图在第一次迁移后制作表格。

2 个答案:

答案 0 :(得分:2)

问题是设置正在缓存,因此第一个连接正常工作,因此您需要使用

清除连接
DB::purge('connectionName');

答案 1 :(得分:1)

只是一个想法,可能是 - >调用函数以某种方式重新初始化Laravel的一部分,或者至少这是我最好的猜测。如果您将每个站点都作为数据库连接(即mysql1,mysql2,mysql3等),您可以尝试使用--database选项进行迁移以运行迁移并查看是否有帮助?

migrate命令有一个选择数据库连接的选项:

weakly consistent