2017-10-16 3 views
1

각 사용자에 대해 로그인 테이블과 해당 데이터베이스 설정이있는 마스터 데이터베이스가 있습니다. 로그인시 DB 설정 가져 오기를 테이블에서 동적으로 변경해야합니다. db 연결을 변경할 수는 있지만 계속 유지되지 않습니다.Laravel에서 동적으로 데이터베이스 연결 변경

Config::set("database.connections.mysql", [ 
'driver' => 'mysql', 
"host" => $usr_host, 
"database" => $usr_database, 
"username" => $usr_username, 
"password" => $usr_password, 
... 
]); 

편집 : 그/그녀가 응용 프로그램에 등록하고, 따라서 내가 설정에 정의 된 각 사용자에 대한 데이터베이스 연결을 해달라고 할 때 새로운 데이터베이스가 잘/database.php

답변

1

각 사용자에 대해 당신이 만들어집니다 사용자 로그인에 기본 데이터베이스를 사용할 수 있으며 데이터베이스 이름에 대한 새 필드가 있습니다. 그런 다음 다른 데이터베이스를 쿼리해야 할 때마다 db 연결을 변경할 수 있습니다. 당신은 여기에 대한 자세한 내용을보실 수 있습니다이

$someModel = new SomeModel; 
$databaseName = "mysql2"; // Dynamically get this value from db 
$someModel->setConnection($databaseName); 
$something = $someModel->find(1); 

같은

뭔가. 당신이 할 수있는 일 laravel에서 http://fideloper.com/laravel-multiple-database-connections

0

은, 당신이 갈 때 당신이 그들을 사용할 수있는 이러한 연결 응용 프로그램에서 작업을 수행 할 파일 conf의/데이터베이스의 연결 배열에서 다른 연결을 만들 수 있습니다.

당신은 예를 들어, 쿼리를 수행 할 연결 ('이름') 방법을 사용해야합니다 당신이 쿼리 빌더 또는 원시 expresions를 사용하는 경우 : 당신이 설득력 사용하는 경우

$users = DB::connection('mysql') 
     ->table('users') 
     ->select(...) 
     ->get(); 

지정할 수 연결 속성의 모델 파일에있는 연결 이름 (예 :

)
<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class User extends Model 
{ 
    /** 
    * The connection name for the model. 
    * 
    * @var string 
    */ 
    protected $connection = 'mysql'; 
} 

문제의 해결책은 다음과 같습니다. 사용자가 파일 conf/database의 사용자에 따라 다른 유형의 연결을 작성하고 사용자가 사용자 테이블의 열로 사용하는 연결 이름을 저장했는지 확인하십시오. 쿼리는 예를 들어, 사용자의 연결의 이름을 얻을 :

$user = User::find(Auth::id()); 
$connection = $user->connection; 

$users = DB::connection($connection) 
                      ->table('users') 
                      ->select(...) 
                      ->get(); 

더 많은 정보는 :

https://laravel.com/docs/5.5/eloquent#eloquent-model-conventions 먼저 설정을 얻을 필요가 https://laravel.com/docs/5.5/database#read-and-write-connections

0

.. 다음 특정 필드를 변경 그런 다음 다시 설정하십시오 ..

$config = Config::get('database.connections.company'); 
$config['database'] = "company_tenant_$id"; 
$config['password'] = "test2123"; 
config()->set('database.connections.company', $config); 
+0

이 설정은 다음 요청에서 기본값으로 변경됩니다. – tyro

+1

미들웨어에서 수행해야하는 작업 ... – ZeroOne

관련 문제