我有一个命令,它会多次调用'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打印到循环的每一步,其他步骤也会显示"Nothing to migrate"。如果我尝试在终端中为其他数据库运行该命令,它会运行得很好。好像是缓存,我不知道。
有人知道发生了什么事吗?
我发现我需要在循环的每一步中重新连接DB连接。因此,代码将是:
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'));
}