localdisk

PHP とか Java とか Web とか好きなことを書きます。

Laravel で複数のDBを使う方法

今日は軽い Tips を。

アプリケーションを作成していると、複数の DB を参照する機会もあると思います。Laravel でももちろん、サポートされています。

接続定義

app/config/database.php

<?php
'default' => 'sqlite',
'connections' => array(
    // デフォルト
    'sqlite' => array(
        'driver'   => 'sqlite',
        'database' => __DIR__.'/../database/production.sqlite',
        'prefix'   => '',
    ),
    // もうひとつ
    'sqlite2' => array(
        'driver'   => 'sqlite',
        'database' => __DIR__.'/../database/develop.sqlite',
        'prefix'   => '',
    ),
)

マイグレーションのインストール

$ php artisan migrate:install --database=sqlite2

--database オプションを付けるのがポイントです。php artisan migrate も一緒です。

スキーマ

<?php
Schema::connection('sqlite2')->create('users', function($table)
{
    $table->increments('id'):
});

コネクションメソッドを呼びます。

クエリービルダー

<?php
$users = DB::connection('sqlite2')->select(...);

これも同じく

Eloquent

<?php
class User extends Eloquent
{

    protected $connection = 'sqlite2';

}

コネクションフィールドを定義します。

コントローラー

<?php
$user = new User;
$user-> setConnection('sqlite2');
$user->save(...);

こちらからは以上です*1

*1:一度言ってみたかった