수색…


다중 데이터베이스 연결

Laravel은 여러 데이터베이스 연결에 대한 사용자 작업을 허용합니다. 여러 데이터베이스에 연결하여 함께 작동하게하려면 연결 설정에 유의해야합니다.

또한 필요한 경우 동일한 응용 프로그램에서 여러 유형의 데이터베이스를 사용할 수 있습니다.

기본 연결 config/database.php 에서 구성 항목 호출을 볼 수 있습니다.

'default' => env('DB_CONNECTION', 'mysql'),

이 이름은 아래의 연결 이름 인 mysql 참조합니다.

'connections' => [

    'sqlite' => [
        'driver' => 'sqlite',
        'database' =>  database_path('database.sqlite'),
        'prefix' => '',
    ],

    'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix' => '',
        'strict' => false,
        'engine' => null,
    ],
],

다른 코드 나 명령에서 데이터베이스 연결의 이름을 언급하지 않은 경우 Laravel은 기본 데이터베이스 연결 이름을 선택합니다. 그러나 여러 데이터베이스 연결에서 기본 연결을 설정해도 사용했던 데이터베이스 연결이 어디에나 설치하는 것이 좋습니다.

마이그레이션 파일

마이그레이션 파일에서 단일 데이터베이스 연결 인 경우 다음을 사용할 수 있습니다.

 Schema::create("table",function(Blueprint $table){
     $table->increments('id');
});

여러 데이터베이스 연결에서 connection() 메서드를 사용하여 Laravel에게 사용하는 데이터베이스 연결을 알려줍니다.

 Schema::connection("sqlite")->create("table",function(Blueprint $table){
     $table->increments('id');
});

장인 이동

단일 데이터베이스 연결을 사용하는 경우 다음을 실행합니다.

php artisan migrate

그러나 여러 데이터베이스 연결의 경우 어떤 데이터베이스 연결이 마이그레이션 데이터를 유지하는지 더 잘 알 수 있습니다. 그래서 당신은 다음 명령을 실행할 것입니다 :

php artisan migrate:install --database=sqlite

이 명령은 이주를 준비하기 위해 목표 데이터베이스에 이주 테이블을 설치합니다.

php artisan migrate --database=sqlite

이 명령은 마이그레이션을 실행하고 대상 데이터베이스에 마이그레이션 데이터를 저장합니다.

php artisan migrate:rollback --database=sqlite

이 명령은 마이그레이션을 롤백하고 대상 데이터베이스에 마이그레이션 데이터를 저장합니다.

우스꽝스러운 모델

Eloquent를 사용하여 데이터베이스 연결을 지정하려면 $connection 속성을 정의해야합니다.

namespace App\Model\Sqlite;
class Table extends Model
{
    protected $table="table";
    protected $connection = 'sqlite';
}

Eloquent를 사용하여 다른 (두 번째) 데이터베이스 연결을 지정하려면 다음을 수행하십시오.

namespace App\Model\MySql;
class Table extends Model
{
    protected $table="table";
    protected $connection = 'mysql';
}

Laravel은 모델에 정의 된 $connection 속성을 사용하여 config/database.php 정의 된 지정된 연결을 활용 config/database.php . $connection 속성이 모델에 정의되어 있지 않으면 기본값이 사용됩니다.

static on 메소드를 사용하여 다른 연결을 지정할 수도 있습니다.

// Using the sqlite connection
Table::on('sqlite')->select(...)->get()
// Using the mysql connection
Table::on('mysql')->select(...)->get()

데이터베이스 / 쿼리 빌더

쿼리 빌더를 사용하여 다른 연결을 지정할 수도 있습니다.

// Using the sqlite connection
DB::connection('sqlite')->table('table')->select(...)->get()
// Using the mysql connection
DB::connection('mysql')->table('table')->select(...)->get()  

단위 테스트

Laravel은 데이터베이스 연결 코드를 테스트하기 위해 seeInDatabase($table,$fielsArray,$connection) 를 제공합니다. 단위 테스트 파일에서 다음과 같이해야합니다.

$this
    ->json(
        'GET',
        'result1/2015-05-08/2015-08-08/a/123'
    )
     ->seeInDatabase("log", ["field"=>"value"], 'sqlite');

이런 식으로 Laravel은 테스트 할 데이터베이스 연결을 알게됩니다.

단위 테스트의 데이터베이스 트랜잭션

Laravel은 데이터베이스가 테스트 중에 모든 변경 사항을 롤백 할 수있게합니다. 여러 데이터베이스 연결을 테스트하려면 $connectionsToTransact 속성을 설정해야합니다.

use Illuminate\Foundation\Testing\DatabaseMigrations;

class ExampleTest extends TestCase
{
     use DatabaseTransactions;

     $connectionsToTransact =["mysql","sqlite"] //tell Laravel which database need to rollBack

    public function testExampleIndex()
    {
        $this->visit('/action/parameter')
         ->see('items');
    }
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow