我正在开发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' => '',
),但我希望应用程序能动态创建数据库..。
发布于 2013-12-05 14:54:49
创建数据库本身相对简单。复杂性在于以某种方式将这些数据库与用户关联起来,然后提取这些数据库名称并在连接中使用它们。这应有助于:
在总体战略方面,考虑创建一个具有以下几个功能的新存储库:
RegisterUser() -使用用户名/密码注册用户。CreateDatabase($name , $user_id) --这应该创建数据库并将其名称存储在表中,然后将其分配给在Register中创建的用户ID。您可以使用DB::statement() (即-DB::语句)在Laravel中运行原始SQL查询(“创建数据库”)。($name);‘,所以把它放在您的CreateDatabase函数中。我在本地测试了这个,它运行得很好。
注意:您需要进行一些验证,以确保数据库不存在,或者您的用户将(显然)得到一个错误。
然后,您可以通过用户ID从表中提取数据库名称,并使用它创建连接,如下所示!
Laravel 4: Multiple Tenant Application, each tenant it's own database and one global database
有一件事--当您更改数据库结构时,您将不得不单独更新每个数据库。注意,Artisan允许使用--database="database_name"选项来实现这一点。
发布于 2013-12-05 09:05:12
只要在任何表中都有一个user_id字段(我认为您所描述的是DB),并且使用关系来使其工作,那么一个表(或多个表)中的一整组字段(或多个表)可能比您想的要高效得多。
https://stackoverflow.com/questions/20392180
复制相似问题