Laravelを使わず、直接PHPからEloquentを使用し、かつ複数のDBに接続する方法。

PHP

自分でウェブアプリケーションを作る場合、フロントエンドにVueを使用し、サーバ側は素のPHPでRestful風に仕上げるスタイルが好みです。

サーバーの仕事は、要求に応じてjsonデータを返すことが主な役割になりますので、LaravelやRailsなどの巨大なフレームワークは無用の長物となるのですが、認証やDBまわりだけフレームワークの機能を使いたいなと思うことはないでしょうか?

実は、Laravelの認証やDBの機能は単体で使用することができます。

今回、DBを扱うにあたり、illuminate/database を使うことにしました。

(※認証系でしたら、sentinelやsentry2あたりを使います。)

インストールの方法については、他のライブラリ同様にcomposerで導入できます。

さて、その使い方ですが、illuminate/database単体で使用する方法をググって調べたのですが、あまり情報は多くないようです。今回は複数のDBに接続したいのですが、そういった情報はなかなか見つかりませんでした。Laravelでの接続方法はいくつかありましたので、illuminate/database単体でもきっと出来るはずです。

結局、 illuminate/database のGithubにあるソースコードを読んで、複数のDBへ接続して使用する方法を調べました。

以下のように指定すればOKでした。

<?php


use Illuminate\Database\Capsule\Manager as Capsule;

include_once('vendor/autoload.php');


// database manager を生成する

$capsule = new Capsule;


// DB1の接続情報を設定する
$capsule->addConnection([

    'driver'    => 'mysql',

    'host'      => 'xxxxx',

    'database'  => 'xxxxx',

    'username'  => 'xxx',

    'password'  => 'xxxxxx',

    'charset'   => 'utf8',

    'collation' => 'utf8_unicode_ci'

]);


// DB2の接続情報を設定する

$capsule->addConnection([

    'driver'    => 'mysql',

    'host'      => 'xxxxx',

    'database'  => 'xxxxx',

    'username'  => 'xxx',

    'password'  => 'xxxxxx',

    'charset'   => 'utf8',

    'collation' => 'utf8_unicode_ci'

], 'second_db'); // <============ ★名前を付ける!


// 標準では"default"という名称になる



$capsule->setAsGlobal();

$capsule->bootEloquent();



// それぞれのDBに接続する

$db1 = $capsule->connection();
 // connection('default')でもOK


$db2 = $capsule->connection('second_db');



// DB1からデータを取得する

$rec1 = $db1->table('users')->get();



// DB2のデータを更新する

$db2->table('users')

    ->where('id', 1)

    ->update(['first_name' => 'taro']);

なかなか便利です。

コメント

タイトルとURLをコピーしました