복붙노트

Laravel에서 여러 데이터베이스를 사용하는 방법

PHP

Laravel에서 여러 데이터베이스를 사용하는 방법

내 시스템에 여러 데이터베이스를 결합하고 싶습니다. 대부분의 경우 데이터베이스는 MySQL입니다. 앞으로는 다를 수 있습니다. 즉, 관리자가 이기종 데이터베이스 시스템의 사용 소스 인 보고서를 생성 할 수 있습니다.

그래서 제 질문은 Laravel이 그러한 상황을 다루기 위해 어떤 Facade를 제공합니까? 또는 다른 프레임 워크가 문제에 더 적합한 기능을 가지고 있습니까?

해결법

  1. ==============================

    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. ==============================

    2.Laravel 5.1에서는 연결을 지정합니다.

    Laravel 5.1에서는 연결을 지정합니다.

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

    기본적으로 Laravel은 기본 연결을 사용합니다. 그것은 간단합니다, 그렇지 않습니까?

    자세한 내용은 여기를 참조하십시오. http://laravel.com/docs/5.1/database#accessing-connections

  3. ==============================

    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'
    

    모든 연결은 데이터베이스, 사용자 이름, 암호 등과 같은 값으로 나열되었으므로 적어도 다른 데이터베이스 이름에 액세스하려면 거의 이해가되지 않습니다.

    따라서 다른 데이터베이스에서 무언가를 선택하려고 할 때마다 항상 기본 데이터베이스에서 끝났습니다.

  4. from https://stackoverflow.com/questions/31847054/how-to-use-multiple-database-in-laravel by cc-by-sa and MIT license