我有一个关于在Laravel 4.1中处理多个数据库连接的问题。 假设我在该主机上有一个带有3个DB的数据库主机
例如:
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'DB_1',
'username' => $_ENV['MYSQL_USER'],
'password' => $_ENV['MYSQL_PASS'],
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
'mysql2' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'DB_2',
'username' => $_ENV['MYSQL_USER'],
'password' => $_ENV['MYSQL_PASS'],
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
'mysql3' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'DB_3',
'username' => $_ENV['MYSQL_USER'],
'password' => $_ENV['MYSQL_PASS'],
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
我应该与这些数据库建立3个不同的连接吗?
或者我应该只有一个连接,并在每个模型中指定表名 类似于:
public $table = "DB_2.table_name";
我问的原因是,我注意到我更容易用尽 数据库连接,因为它在需要时创建新的数据库连接 连接到不同的数据库。
我知道两者都会奏效,但我对所谓的最佳实践"感兴趣。在这种情况下。
提前感谢您的反馈。
干杯。
答案 0 :(得分:1)
指定表,而不是数据库实现。
我不是“功能”的忠实粉丝,它允许在同一服务器上的DB之间跨MySQL查询MySQL。这就是你所提到的东西。
table_name_test
这样的测试数据库来测试您的代码或数据库修改,那么每次在db和仅编辑配置文件之间跳转时,您都必须修改代码中的所有表名。 select * from db1.foo f Join db2.bar b on b.id = f.id;
这样的跨数据库查询的黑暗,诱人而又卑鄙的路径。恭喜你刚刚将你的2个dbs变成了一个可能无法在MySQL之外运行的大型数据库此外,即使您指定了三个连接,您可能也没有建立连接并同时使用所有三个连接......我希望如此。如果你确实使用了每个请求的所有3个连接laravel app / site节省2个连接可能是微优化。
答案 1 :(得分:0)
这段代码在我需要时为我提供了诀窍。
Config::set('database.default', 'database_name');
在您的情况下,将 database_name 替换为您可能需要的 database_name 。每次看到需要进行切换时,我都会在控制器中调用它。在查询之前,例如。
我不知道是否 有史以来最好的方式 ,但这对我有用,我认为值得分享! = d