サーチ…


複数のデータベース接続

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 Model

Eloquentを使用してデータベース接続を指定するには、 $connectionプロパティを定義する必要があります。

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

Eloquentを使用して別の(2番目の)データベース接続を指定するには:

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

Laravelは、 config/database.php定義された指定された接続を利用するために、モデルで定義された$connectionプロパティを使用し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