在我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',
),
Run Code Online (Sandbox Code Playgroud)
因此,默认情况db1下,最初将其设置为默认DB.现在我想通过从'select'下拉列表中选择一个选项将默认数据库切换为'db2'.这将对我所做的控制器方法进行后AJAX请求
public function postChangeDb() {
$db = Input::get('db');
Config::set('database.default', $db);
}
Run Code Online (Sandbox Code Playgroud)
完成后,我'刷新'页面,但连接仍然是'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!
}
Run Code Online (Sandbox Code Playgroud)
以上工作正常,它成功切换数据库.交换机是否按"请求"进行?
Config::set 只会在每个请求的基础上工作,因此您可能希望在Session中设置数据库并在后续请求中获取它.
您可以选择在何处执行此操作. /app/start/global将是一种选择.在控制器构造函数中将是另一个.您也可以注册服务提供商.
下面是控制器构造函数中代码可能类似于[警告:未经测试的代码!]的示例:
public function __construct() {
if(Session::has('selected_database'){
Config::set('database.default',Session::get('selected_database'));
} else {
return Redirect::to('database_choosing_page');
}
}
Run Code Online (Sandbox Code Playgroud)
以及数据库设置功能的更新:
public function postChangeDb() {
$db = Input::get('db');
Session::put('selected_database',$db);
Config::set('database.default', $db);
}
Run Code Online (Sandbox Code Playgroud)
您是否尝试过简单地更改默认连接app/config/database.php?
'default' => 'db2'
Run Code Online (Sandbox Code Playgroud)
如果情况并非如此,请提供有关该问题的更多信息。
编辑: 看来您在模型中硬编码了所有连接。尝试像这样更新模型:
protected $connection = 'db2';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14670 次 |
| 最近记录: |