在laravel中访问动态数据库

时间:2017-06-09 06:01:33

标签: php mongodb laravel laravel-5 laravel-5.3

我正在处理一个应用程序。我有一个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库。有什么建议吗?

2 个答案:

答案 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