我正在使用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'
]);
因此,看来我已经回答了我自己的问题,但是也许有人可以对此程序发表评论。
我将放下自己的解决方案...。1)创建数据库名称例如,我命名新数据库db_1
,其中1代表主数据库中的系统ID。我考虑过在主数据库中存储唯一的加扰名称。最后,这似乎太过分了。
2)创建连接-为此,我使用与新数据库完全相同的名称。
public function createConnection()
{
$connections = \Config::get('database.connections');
if(!isset($connections[$this->getSystemName()]))
{
$tenant_connection = [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => $this->getSystemName(),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'port' => '3306'
];
$connections[$this->getSystemName()] = $tenant_connection;
\Config::set('database.connections', $connections);
//dd(\Config::get('database.connections'));
}
}
3)创建数据库,您可以使用主连接来完成
$sql = "CREATE DATABASE " . $this->tenant_name;
DB::connection('main_db')->statement($sql);
4)运行迁移
$r = \Artisan::call('migrate', [
'--path' => "database/migrations_tenant",
'--database' => $this->tenant_name
]);
5)最后,您可以播种测试数据或加载一些默认数据。像这样访问连接
DB::connection($this->system_name)->table($table)->insert($csv);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句