首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态创建数据库

问动态创建数据库
EN

Stack Overflow用户
提问于 2013-12-05 05:28:55
回答 2查看 3.1K关注 0票数 1

我正在开发laravel 4应用程序,因为我希望允许用户注册应用程序,当他们注册应用程序时,应该允许注册用户使用一个新的空数据库,我使用mysql作为后端,我知道下面的代码可以设置数据库连接

代码语言:javascript
复制
Config::set('database.connections', ConnectionArray);

并将其设置为默认

代码语言:javascript
复制
Config::set('database.default', ConnectionKey); 

要手动连接另一个数据库,我可以使用以下方式

代码语言:javascript
复制
'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'    => '',
),

但我希望应用程序能动态创建数据库..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-05 14:54:49

创建数据库本身相对简单。复杂性在于以某种方式将这些数据库与用户关联起来,然后提取这些数据库名称并在连接中使用它们。这应有助于:

在总体战略方面,考虑创建一个具有以下几个功能的新存储库:

  1. RegisterUser() -使用用户名/密码注册用户。
  2. 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"选项来实现这一点。

票数 3
EN

Stack Overflow用户

发布于 2013-12-05 09:05:12

只要在任何表中都有一个user_id字段(我认为您所描述的是DB),并且使用关系来使其工作,那么一个表(或多个表)中的一整组字段(或多个表)可能比您想的要高效得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20392180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档