Laravel에서 여러 데이터베이스를 사용하는 방법
PHPLaravel에서 여러 데이터베이스를 사용하는 방법
내 시스템에 여러 데이터베이스를 결합하고 싶습니다. 대부분의 경우 데이터베이스는 MySQL입니다. 앞으로는 다를 수 있습니다. 즉, 관리자가 이기종 데이터베이스 시스템의 사용 소스 인 보고서를 생성 할 수 있습니다.
그래서 제 질문은 Laravel이 그러한 상황을 다루기 위해 어떤 Facade를 제공합니까? 또는 다른 프레임 워크가 문제에 더 적합한 기능을 가지고 있습니까?
해결법
-
==============================
1..env에서
.env에서
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=database1 DB_USERNAME=root DB_PASSWORD=secret DB_CONNECTION_SECOND=mysql DB_HOST_SECOND=127.0.0.1 DB_PORT_SECOND=3306 DB_DATABASE_SECOND=database2 DB_USERNAME_SECOND=root DB_PASSWORD_SECOND=secret
config / database.php에서
'mysql' => [ 'driver' => env('DB_CONNECTION'), 'host' => env('DB_HOST'), 'port' => env('DB_PORT'), 'database' => env('DB_DATABASE'), 'username' => env('DB_USERNAME'), 'password' => env('DB_PASSWORD'), ], 'mysql2' => [ 'driver' => env('DB_CONNECTION_SECOND'), 'host' => env('DB_HOST_SECOND'), 'port' => env('DB_PORT_SECOND'), 'database' => env('DB_DATABASE_SECOND'), 'username' => env('DB_USERNAME_SECOND'), 'password' => env('DB_PASSWORD_SECOND'), ],
연결 정의
return array( 'default' => 'mysql', 'connections' => array( # Primary/Default database connection 'mysql' => array( 'driver' => 'mysql', 'host' => '127.0.0.1', 'database' => 'database1', 'username' => 'root', 'password' => 'secret' 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ), # Secondary database connection 'mysql2' => array( 'driver' => 'mysql', 'host' => '127.0.0.1', 'database' => 'database2', 'username' => 'root', 'password' => 'secret' 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ), ), );
개요
사용할 연결을 지정하려면 connection () 메소드를 실행하기 만하면됩니다.
Schema::connection('mysql2')->create('some_table', function($table) { $table->increments('id'): });
쿼리 빌더
$users = DB::connection('mysql2')->select(...);
희한한
모델에 $ connection 변수를 설정하십시오.
class SomeModel extends Eloquent { protected $connection = 'mysql2'; }
또한 런타임시 setConnection 메소드를 통해 연결을 정의 할 수 있습니다
class SomeController extends BaseController { public function someMethod() { $someModel = new SomeModel; $someModel->setConnection('mysql2'); $something = $someModel->find(1); return $something; } }
다중 데이터베이스 연결 사용
여러 개의 연결을 사용하는 경우 DB facade의 연결 방법을 통해 각 연결에 액세스 할 수 있습니다. 연결 방법에 전달 된 이름은 config / database.php 구성 파일에 나열된 연결 중 하나와 일치해야합니다.
$users = DB::connection('foo')->select(...);
또한 연결 인스턴스에서 getPdo 메소드를 사용하여 원본의 기본 PDO 인스턴스에 액세스 할 수 있습니다.
$pdo = DB::connection()->getPdo();
유용한 링크
-
==============================
2.Laravel 5.1에서는 연결을 지정합니다.
Laravel 5.1에서는 연결을 지정합니다.
$users = DB::connection('foo')->select(...);
기본적으로 Laravel은 기본 연결을 사용합니다. 그것은 간단합니다, 그렇지 않습니까?
자세한 내용은 여기를 참조하십시오. http://laravel.com/docs/5.1/database#accessing-connections
-
==============================
3.사실, DB :: connection ( 'name') -> select (..)는 나를 위해 작동하지 않습니다. 왜냐하면 'name'은 큰 따옴표 안에 있어야하기 때문입니다 : "name"
사실, DB :: connection ( 'name') -> select (..)는 나를 위해 작동하지 않습니다. 왜냐하면 'name'은 큰 따옴표 안에 있어야하기 때문입니다 : "name"
그래도 select 쿼리는 내 기본 연결에서 실행됩니다. Laravel이 의도 한대로 작동하도록 설득하는 방법 : 연결을 변경하십시오.
편집 : 나는 그것을 알아 냈다. Laravels DatabaseManager를 디버깅 한 후 내 database.php (config 파일) ($ this-> app 내부)가 잘못되었습니다. "연결"섹션에서 나는 그것을 복사 한 값과 함께 "데이터베이스"와 같은 것을 가지고있었습니다. 분명한 용어로
env('DB_DATABASE', 'name')
나는 무언가를 배치해야했다.
'myNewName'
모든 연결은 데이터베이스, 사용자 이름, 암호 등과 같은 값으로 나열되었으므로 적어도 다른 데이터베이스 이름에 액세스하려면 거의 이해가되지 않습니다.
따라서 다른 데이터베이스에서 무언가를 선택하려고 할 때마다 항상 기본 데이터베이스에서 끝났습니다.
from https://stackoverflow.com/questions/31847054/how-to-use-multiple-database-in-laravel by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
PHP에서 체크 박스가 선택되었는지 읽는 방법? (0) | 2018.09.11 |
---|---|
이미지를 이메일에 삽입하는 법 (0) | 2018.09.11 |
Access-Control-Allow-Origin을 우회하는 방법? (0) | 2018.09.11 |
"date () : 시스템의 시간대 설정에 의존하는 것이 안전하지 않습니다 ..." (0) | 2018.09.11 |
참고 : json_encode를 사용하여 "특수"유니 코드 문자가 이상하게 인코딩되는 이유는 무엇입니까? (0) | 2018.09.11 |