php 尝试加载环境值并在多个数据库上运行迁移

zc0qhyus  于 2023-05-05  发布在  PHP
关注(0)|答案(1)|浏览(66)

我试图加载特定站点的配置并通过自定义命令运行,但它无法运行。
这是我的代码。

$sites = Site::all();
foreach ($sites as $site) {
     $this->info("Running migrations on Site: {$site->name}:{$site->id}");
     config([
         'database.'.env('DB_CONNECTION').'.database' => env('DB_DATABASE_'.$site->id),
         'database.'.env('DB_CONNECTION').'.username' => env('DB_USERNAME_'.$site->id),
         'database.'.env('DB_CONNECTION').'.password' => env('DB_PASSWORD_'.$site->id),
     ]);
     Artisan::call("migrate", []);
}

我的envs是这样的,在末尾附加了ID

DB_DATABASE_1=db1
DB_USERNAME_1=root
DB_PASSWORD_1=

我一定是做错了什么。谁能帮帮我。

p1iqtdky

p1iqtdky1#

你可以通过在你的env文件中做一些改变来动态地迁移表,就像我测试的那样。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE_1=multidb_1
DB_USERNAME_1=root
DB_PASSWORD_1=

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE_2=multidb_2
DB_USERNAME_2=root
DB_PASSWORD_2=

并在您的config/database.php中添加多个数据库配置数组,只需更改 databasename**usernamepassword,并保留其他配置选项。

'mysql_1' => [
      'database' => env('DB_DATABASE_1', 'forge'),
      'username' => env('DB_USERNAME_1', 'forge'),
      'password' => env('DB_PASSWORD_1', ''),
...

'mysql_2' => [
      'database' => env('DB_DATABASE_2', 'forge'),
      'username' => env('DB_USERNAME_2', 'forge'),
      'password' => env('DB_PASSWORD_2', ''),
...

并将其中任何一个设置为默认值,如

'default' => env('DB_CONNECTION', 'mysql_1'),

你将需要指定额外的数据库配置选项,在使用artisan命令迁移时,laravel会从config/database.php中查看该选项。

for($i=1; $i<=2; $i++)
{
    Artisan::call('migrate --database=mysql_'.$i.'');
}

你可以用你的方法来迭代你的站点ID

相关问题