我有一个命令可以调用' 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打印到循环的每一步,其他的也会显示"无需迁移"。如果我尝试在终端中运行其他数据库的命令,它可以很好地工作。这似乎是一个缓存,我不知道。
有没有人知道发生了什么?
答案 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'));
}