【发布时间】:2016-02-13 05:37:22
【问题描述】:
我正在使用 laravel 5 中的主数据库和多个租户数据库构建系统。我有一个主数据库的数据库迁移和种子没有问题,使用 php artisan migrate:refresh --seed。
然后租户在注册后获得自己的数据库。我需要在租户数据库上运行迁移和种子。
租户迁移文件存储在单独的文件夹中。使用以下命令运行迁移(不幸的是在主数据库上)
\Artisan::call('migrate', [
'--path' => "database/migrations_system"
);
但是我需要在租户数据库上进行迁移,比如 DB_1。
我阅读了以下内容应该可以工作
\Artisan::call('migrate', [
'--path' => "database/migrations_system",
'--database' => 'db_1'
]);
但是我最终得到了一个错误
InvalidArgumentException in DatabaseManager.php line 238:
数据库 [db_1] 未配置。
卡住....如何指定要在特定数据库上运行的迁移?
更新:
我发现更改 config/database.php 并添加 db_1 让我摆脱了这个错误....
'db_1' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => 'db_1',
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', 'pass'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'port' => '3306'
],
但是这种连接是未知的,需要即时完成,我也被困在如何完成......
再次更新和工作解决方案....即时修改配置...
$connections = \Config::get('database.connections');
$tenant_database = 'db_1'; //assign from your main database
$tenant_connection = [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => $tenant_database ,
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'port' => '3306'
];
$connections['tenant'] = $tenant_connection;
\Config::set('database.connections', $connections);
\Artisan::call('migrate', [
'--path' => "database/migrations_system",
'--database' => 'tenant'
]);
所以看起来我已经回答了我自己的问题,但是也许有些人可以对此程序发表评论。
【问题讨论】:
标签: php laravel-5 database-migration laravel-artisan