gpt4 book ai didi

php - Laravel - 全局更改默认数据库连接

转载 作者:可可西里 更新时间:2023-11-01 12:35:36 26 4
gpt4 key购买 nike

在我的 database.php 中,我配置了两个数据库。

'db1' => array(
'driver' => 'pgsql',
'host' => 'localhost',
'database' => 'db1',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8',
'prefix' => '',
'schema' => 'public',
),

'db2' => array(
'driver' => 'pgsql',
'host' => 'localhost',
'database' => 'db2',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8',
'prefix' => '',
'schema' => 'public',
),

所以默认情况下 db1 最初设置为默认数据库。现在我想通过从“选择”下拉列表中选择一个选项将默认数据库切换为“db2”。这将向我执行的 Controller 方法发送 AJAX 请求

public function postChangeDb()  {
$db = Input::get('db');
Config::set('database.default', $db);
}

完成后,我“刷新”页面,但连接仍处于“db1”。

我也尝试了以下

  public function getTest() {
Config::set('database.default', 'db1');
$users = User::all();
echo sizeof($users); // returns 20

Config::set(database.default', 'db2');
$users = User::all();
echo sizeof($users); // returns 50 - which is correct!
}

并且上面的工作正常并且它成功地切换了数据库。开关是“按请求”的基础吗?

最佳答案

Config::set 只会在每个请求的基础上工作,因此您可能希望在 Session 中设置您的数据库并在后续请求中获取它。

您可以选择在何处执行此操作。 /app/start/global 是一种选择。在 Controller 构造函数中是另一个。您也可以注册服务提供商来执行此操作。

下面是 Controller 构造函数中的代码示例[警告:未经测试的代码!]:

   public function __construct() {
if(Session::has('selected_database'){
Config::set('database.default',Session::get('selected_database'));
} else {
return Redirect::to('database_choosing_page');
}
}

以及对数据库设置函数的更新:

public function postChangeDb()  {
$db = Input::get('db');
Session::put('selected_database',$db);
Config::set('database.default', $db);
}

关于php - Laravel - 全局更改默认数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18975500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com