我正在开发laravel 4应用程序,因为我想允许用户注册应用程序,当他们注册应用程序时应该允许注册用户使用新的空数据库,我使用mysql进行后端我知道以下代码设置数据库连接
Config::set('database.connections', ConnectionArray);
并将其设为默认
Config::set('database.default', ConnectionKey);
手动连接另一个数据库我可以这样使用
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'database',
'username' => 'root',
'password' => '123456',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
'mysql_tenant1' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'tenant1',
'username' => 'root',
'password' => '123456',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
但我想应用程序应该动态创建数据库......
答案 0 :(得分:3)
创建数据库本身会相对简单。复杂性在于以某种方式将这些数据库与用户相关联,然后提取这些数据库名称并在连接中使用它们。这应该有所帮助:
就整体战略而言,考虑创建一个包含一些功能的新存储库:
RegisterUser()
- 用户名/密码注册用户。CreateDatabase($name , $user_id)
- 这应该创造你的
数据库并将其名称存储在表中,然后将其分配给您在“注册用户”中创建的用户ID。您可以使用DB::statement()
在Laravel中运行原始SQL查询(即 - ``DB :: statement('create database'。$ name);`,所以将它粘贴在您的CreateDatabase函数中。我在本地测试了这个它运作得很好。
注意:您需要进行一些验证以确保数据库尚不存在,或者您的用户(显然)会收到错误。
然后,您可以按用户ID从表中提取数据库名称,并按照下面的SO所述创建与它的连接!
Laravel 4: Multiple Tenant Application, each tenant it's own database and one global database
有一件事 - 当您对数据库结构进行更改时,您将不得不单独更新每个数据库。请注意,Artisan允许使用--database="database_name"
选项。
答案 1 :(得分:0)
在任何表格中都有一个user_id字段(我认为您正在描述的数据库),并使用关系使其工作,一个表中的一大堆字段(或多个表)可能比你想象的更有效率。