我正在处理一个应用程序。我有一个master数据库,我存储所有数据库名称。我做了一个发送db_name的api。如果主db中存在该db_name,则它将获取该值和凭据。
之后,我想在新数据库上执行所有操作。
我已经编写了这样的控制器功能,但它似乎不起作用:
public function test(Request $request) {
$users = Config::where('db_name', '=', $request->db_name)->first();
if ($users) {
config(['database.mongodb' => [
'database' => $users->db_name
]]);
}
$contacts = \DB::collection('contacts')->get();
return response()->json($contacts);
}
我正在访问的网址:
http://localhost:8000/api/test?db_name=79b83e17125f770f0294619942586e57
api.php
Route::get('/test', 'SearchController@test');
我正在使用mongodb和jenssegers / laravel-mongodb库。有什么建议吗?
答案 0 :(得分:0)
你可以这样做两种方式
public function test(Request $request) {
$users = Config::where('db_name', '=', $request->db_name)->first();
$contacts = \DB::collection($users->db_name.'.contacts')->get();
return response()->json($contacts);
}
您也可以将数据库名称运行时间更改为配置文件
public function test(Request $request) {
$users = Config::where('db_name', '=', $request->db_name)->first();
if ($users) {
\Config::set('database.connections.mongodb.database',$users->db_name);
}
// retrun DB::connection()->getDatabaseName()
$contacts = \DB::collection('contacts')->get();
return response()->json($contacts);
}
答案 1 :(得分:0)
经过大量的搜索和谷歌搜索后,我找到了一个有效的解决方案
https://lukevers.com/2015/03/25/on-the-fly-database-connections-with-laravel-5