3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Lumenで複数のDBにアクセスする方法

Last updated at Posted at 2017-08-29

公式ドキュメントにやり方が記載されてなかったので。

設定ファイルを追加する

config/database.php を新規作成してください。

以下のような構成になるはずです。

.                        
├── app                          
├── artisan              
├── bootstrap                    
├── composer.json        
├── composer.lock  
├── config
│   └── database.php      
├── database                      
├── phpunit.xml          
├── public                    
├── readme.md            
├── resources                      
├── routes                       
├── storage                         
├── tests                   
└── vendor                

設定ファイルの記載

config/database.phpconnections 配列に接続先を追加します。

<?php
return [
    
    'default' => 'db1',
    'migrations' => 'migrations',
    'connections' => [
        'db1' => [
            'driver'    => env('DB_CONNECTION'),
            'host'      => env('DB_HOST'),
            'port'      => env('DB_PORT'),
            'database'  => env('DB_DATABASE'),
            'username'  => env('DB_USERNAME'),
            'password'  => env('DB_PASSWORD'),
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
        ],
        'db2' => [
            'driver'    => env('DB2_CONNECTION'),
            'host'      => env('DB2_HOST'),
            'port'      => env('DB2_PORT'),
            'database'  => env('DB2_DATABASE'),
            'username'  => env('DB2_USERNAME'),
            'password'  => env('DB2_PASSWORD'),
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
        ],
    ],
];

default は明示的に指定していない時に読みに行くDBの向き先で、
migrations は設定されていないと artisan migrate 時にエラーがでます。

.envファイルの修正

.env ファイルに接続先の情報を記録する定数を追加します。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db1
DB_USERNAME=
DB_PASSWORD=

DB2_CONNECTION=mysql
DB2_HOST=127.0.0.1
DB2_PORT=3306
DB2_DATABASE=db2
DB2_USERNAME=
DB2_PASSWORD=

※上記の接続情報は適当ですので、環境に合わせて適切に設定してください

利用方法

デフォルトだと config/database.phpdefault で指定された向き先のDBに繋がるので、
異なるDBにアクセスしたい際は、明示的に指定してやる必要があります。

Eloquent側に接続情報を記載するやり方

<?php

class Hoge extends Model {

    protected $connection = 'db2';

}

実行時に接続情報を定義するやり方

<?php

class ExampleController extends Controller {

    public function fooMethod()
    {
        $foo = new Foo;

        $foo->setConnection('db2');

        $data = $foo->find(1);

        return $data;
    }

}

クエリビルダで指定するやり方

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

結論

Laravelのやり方とほぼ同じでした :rolling_eyes:

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?