タイトル: データベースの設定
Laravelにおけるデータベース設定について記載します。Laravelでは .env と config/database.php の2層で接続情報を管理し、複数DB接続・トランザクション・ロック制御まで柔軟に扱えます。
※テーブルの作成、変更などに関してはマイグレーションを参照してください。
子ページから項目を選択してください。
本ページの子ページ一覧
| 項目 | 内容 |
|---|---|
| config/database.phpファイル | 接続定義の本体。デフォルト接続、複数接続の構造 |
| .env | 環境ごとに値を切り替える設定ファイル |
| 複数のデータベースに接続する方法 | 同一アプリで複数DB(読み書き分離・別DB参照) |
| DBトランザクション | DB::transaction() による一括コミット/ロールバック |
| DBの悲観ロック | lockForUpdate() / sharedLock() |
基本の接続設定(.env)
|
DB_CONNECTION=mysql |
.env を変更したら必ず以下を実行してキャッシュをクリアします。
|
$ php artisan config:clear |
対応DBエンジン
| DB_CONNECTION値 | 対応DB |
|---|---|
mysql | MySQL / MariaDB |
pgsql | PostgreSQL |
sqlite | SQLite |
sqlsrv | SQL Server |
接続確認
|
# tinker で接続確認 |
よくあるトラブル
- SQLSTATE[HY000] [2002] Connection refused — DBサーバー未起動/ポート違い/ホスト名違い(Docker環境では
localhostではなくサービス名) - Access denied for user — ユーザー名・パスワード違い、または権限不足
- SQLSTATE[42000]: Specified key was too long — utf8mb4のインデックスで767バイト超過。
Schema::defaultStringLength(191);をAppServiceProviderに追加 - config変更が反映されない —
config:cache後はconfig:clearしないと .env変更が無効
注意点
- 本番では
.envをリポジトリにコミットしない(.env.exampleのみ管理) - 本番では
php artisan config:cacheでキャッシュ化すると高速化(ただし.env変更後は再キャッシュが必要) - クラウド環境ではSecretsManagerやSSMから値を注入することが多い
関連
- 親カテゴリ: Laravel
- マイグレーション: マイグレーションとテーブル定義
- artisanコマンド: コマンド一覧