Symfony 設定
Weaver ORM は config/packages/weaver.yaml で設定します。このページではすべての利用可能なオプションを説明します。
最小設定
# config/packages/weaver.yaml
weaver_orm:
connection:
driver: pdo_pgsql
url: '%env(DATABASE_URL)%'
mapper_paths:
- '%kernel.project_dir%/src/Mapper'
完全な設定リファレンス
# config/packages/weaver.yaml
weaver_orm:
# ------------------------------------------------------------------ #
# プライマリ(書き込み)接続
# ------------------------------------------------------------------ #
connection:
driver: pdo_pgsql # pdo_pgsql | pdo_mysql | pdo_sqlite | pyrosql
url: '%env(DATABASE_URL)%' # DSN は以下の個別オプションより優先されます
# 個別オプション(url: の代替)
# host: '%env(DB_HOST)%'
# port: '%env(int:DB_PORT)%'
# dbname: '%env(DB_NAME)%'
# user: '%env(DB_USER)%'
# password: '%env(DB_PASSWORD)%'
# 接続プールオプション(FrankenPHP / RoadRunner)
# persistent: true
# charset: utf8mb4 # MySQL のみ
# ------------------------------------------------------------------ #
# リードレプリカ(オプション)
# ------------------------------------------------------------------ #
read_connection:
driver: pdo_pgsql
url: '%env(DATABASE_READ_URL)%'
# ------------------------------------------------------------------ #
# マッパー検出
# ------------------------------------------------------------------ #
mapper_paths:
- '%kernel.project_dir%/src/Mapper'
# 複数の境界コンテキスト用にパスを追加:
# - '%kernel.project_dir%/src/Billing/Mapper'
# - '%kernel.project_dir%/src/Catalog/Mapper'
# ------------------------------------------------------------------ #
# マイグレーション
# ------------------------------------------------------------------ #
migrations_path: '%kernel.project_dir%/migrations/weaver'
migrations_namespace: 'App\Migrations\Weaver'
# ------------------------------------------------------------------ #
# デバッグと安全設定
# ------------------------------------------------------------------ #
debug: '%kernel.debug%' # すべてのクエリを Symfony プロファイラーにログ出力
# 開発環境で N+1 クエリパターンを検出して警告する
n1_detector: true # debug: true の場合のみ有効
# SELECT が N 行を超える場合に例外をスローします。
# 本番環境での意図しないフルテーブルスキャンから保護します。
# 無効にするには 0 に設定。
max_rows_safety_limit: 5000
接続ドライバー
pdo_pgsql — PostgreSQL
weaver_orm:
connection:
driver: pdo_pgsql
url: '%env(DATABASE_URL)%'
DATABASE_URL="postgresql://app:secret@db:5432/myapp?serverVersion=16&charset=utf8"
pdo_mysql — MySQL / MariaDB
weaver_orm:
connection:
driver: pdo_mysql
url: '%env(DATABASE_URL)%'
DATABASE_URL="mysql://app:secret@db:3306/myapp?serverVersion=8.0&charset=utf8mb4"
pdo_sqlite — SQLite(テスト/組み込み)
weaver_orm:
connection:
driver: pdo_sqlite
url: '%env(DATABASE_URL)%'
# インメモリ(インテグレーションテストに便利):
DATABASE_URL="sqlite:///:memory:"
# ファイルベース:
DATABASE_URL="sqlite:///%kernel.project_dir%/var/app.db"
pyrosql — PyroSQL 分析エンジン
weaver_orm:
connection:
driver: pdo_pgsql
url: '%env(DATABASE_URL)%'
# 分析クエリ用の専用リード接続としての PyroSQL
read_connection:
driver: pyrosql
url: '%env(VALKARNSQL_URL)%'
環境変数
典型的な .env / .env.local の設定:
# .env
DATABASE_URL="postgresql://app:!ChangeMe!@127.0.0.1:5432/app?serverVersion=16&charset=utf8"
# .env.local(VCS にコミットしない)
DATABASE_URL="postgresql://app:mylocalpwd@db:5432/app_dev?serverVersion=16&charset=utf8"
# リードレプリカ(オプション)
DATABASE_READ_URL="postgresql://app_ro:readpwd@db-replica:5432/app?serverVersion=16&charset=utf8"
リードレプリカの設定
read_connection が定義されると、Weaver は SELECT クエリをリード接続に、INSERT / UPDATE / DELETE クエリをプライマリ接続に自動的にルーティングします。
weaver_orm:
connection:
driver: pdo_pgsql
url: '%env(DATABASE_URL)%'
read_connection:
driver: pdo_pgsql
url: '%env(DATABASE_READ_URL)%'
クエリを強制的にプライマリ接続に向けるには(例:書き込み直後)、->onPrimary() を使用します:
// レプリカをバイパスして常にプライマリから読み取る
$user = $this->users->query()
->onPrimary()
->where('id', '=', $id)
->first();