LoginSignup
2
3

More than 1 year has passed since last update.

Laravelで複数のDBを繋ぐ時のTips

Posted at

結論

ちょっとはサポートしていますが、migrate:freshRefreshDatabaseが対応してないのが大分痛いです😣

DockerでMySQLの複数のデータベースの立ち上げ方が分からない

Laravel関係ないですけど、まずここからが大変なんですよね。結論からいうとdocker-compose.ymlでもDB1個しか対応していないため、コンテナ作成時に自動実行されるSQLファイルを設定して、地道にDB作成やらユーザー設定のSQLを書くというアプローチがベターのようです。変に分散するとアレなんで。

  db:
    image: mysql:8.0.27
    container_name: db
    volumes:
      - ./docker/db/data:/var/lib/mysql
      - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
      # 複数のDBを立ち上げたいがdocker-composeのオプションで対応してないので、
      # コンテナ作成時に自動で実行されるSQLファイル内で設定する
      - ./docker/db/sql:/docker-entrypoint-initdb.d

migrate:freshで片方のDBしか消えてない

片方のDBしかマイグレーションされないのですがエラーとかは出ずに成功したかのような表記になります。 なんでや!😫
結論から言うと今のところ対応していません。php artisan db:wipe --database 【接続名】で1個ずつ消してからmigrateしましょう。

マイグレーションやEroquentで毎回::connection(【DB名】)を書くのが辛い

これについては公式で対処法が用意されています。マイグレーションのクラスに下記のようにconnectionプロパティを設定することで切り替えることができます。

/**
 * マイグレーションが使用するデータベース接続
 *
 * @var string
 */
protected $connection = '【DB接続名】';

/**
 * マイグレーションの実行
 *
 * @return void
 */
public function up()
{
    //
}

自動テストでRefreshDatabaseが効かない

RefreshDatabaseは内部でmigrate:freshを使っているので効きません。ここは流石に自分でArtisanコマンド作るして呼び出すしかないですね……。

🙏Laravel公式ドキュメント翻訳者への支援のお願い

Laravelの公式ドキュメントの日本語版であるReaDouble.comを運営されている川瀬裕久氏が、広告収入の低下と持病の悪化のため、翻訳プロジェクトを継続することが困難になり、GitHub sponsorsを募集しています。 日本のLaravelユーザーでここを見たことない人はいないと思うので、もし恩義を感じているならば是非支援のほどお願いします。私も支援させていただいております

参考

2
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
2
3