この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:2
ページ更新者:guest
更新日時:2021-06-12 08:12:22

タイトル: 複数のデータベースに接続する方法

本稿ではLaravelにて複数データベースに接続する方法に関して記述します。

 

ポイントは「/config/database.php」ファイルとなるので開きましょう。

もうひとつDBの設定を追加する場合は以下のように記述します。(黄色い文字が追記した部分)

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

    'connections' => [

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],

      'mysql2' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST_2', '127.0.0.1'),
            'port' => env('DB_PORT_2', '3306'),
            'database' => env('DB_DATABASE_2', 'forge'),
            'username' => env('DB_USERNAME_2', 'forge'),
            'password' => env('DB_PASSWORD_2', ''),
            'unix_socket' => env('DB_SOCKET_2', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],   

],

 

.envファイルには「DB_HOST_2」など新しいDBの接続設定を記述しておいて下さい。

実際に2つ目のSQLを実行する際には以下のように記述します。

DB::connection('mysql2')->select('select * from members');

 

なお、1つめのDBに接続する際は今までどおり明示的な「connection」を記述する必要はありません。

理由は「/config/database.php」の「default」に設定されているのが1つめのDBだからです。

以下、もう少し複雑なSQLの実行例。

$results = DB::connection('mysql2')
                ->table('ret_t_tweet')
                ->join('ret_m_user', 'ret_t_tweet.user_id', '=', 'ret_m_user.id')
                ->where('ret_m_user.delete_flag', 0)
                ->where('ret_t_tweet.created_at_shaped', ">=", $today)
                ->select('ret_t_tweet.tweet_url as tweet_url'
                        , 'ret_t_tweet.text as text'
                        , 'ret_t_tweet.created_at_shaped as created_at_shaped'
                        , 'ret_m_user.id as user_id'
                        , 'ret_m_user.name as user_name'
                        )
                ->paginate(10);