在Artisan Command中多次调用相同的'migrate'命令

时间:2014-08-21 16:17:05

标签: php laravel

我有一个命令可以调用' migrate'命令很多次,每个人都有不同的配置。那是我的代码:

$pdo = new PDO("mysql:host=$host", $root, $root_password);
$databases = $pdo->query('SHOW DATABASES')->fetchAll();

foreach($databases as $db){
  $dbName = $db['Database'];

  Config::set('database.connections.my_database.database', $dbName);
  $this->call('migrate', array('--env' => 'local', '--database' => 'my_database')); 
}

由于我在我的应用程序中动态创建了数据库,因此我使用此命令为所有数据库运行迁移。所以,首先我获取所有数据库名称,然后调用' migrate'命令每一个。但我有一个问题。

Artisan仅将迁移运行到第一个$ dbName。即使我正确地将$ dbName打印到循环的每一步,其他的也会显示"无需迁移"。如果我尝试在终端中运行其他数据库的命令,它可以很好地工作。这似乎是一个缓存,我不知道。

有没有人知道发生了什么?

1 个答案:

答案 0 :(得分:0)

我发现我需要在每个循环步骤中重新连接数据库连接。所以,代码将是:

foreach($databases as $db){
  $dbName = $db['Database'];

  Config::set('database.connections.my_database.database', $dbName);
  DB::reconnect('my_database');
  $this->call('migrate', array('--env' => 'local', '--database' => 'my_database')); 
}