mcpField
D
doctrine-relations

doctrine-relations

github.com/dev-toolings開発22794 回インストール3 週間前に更新
リポジトリ

doctrine-relations について

SymfonyとDoctrineでエンティティ関連をマッピングし、永続化の動作を管理する開発スキルです。所有側の選択、カスケード、孤児削除、コレクション読み込み、複数のエンティティマネージャーを扱います。

主な機能

  1. 01所有側と逆側のマッピング
  2. 02双方向コレクションの同期
  3. 03カスケードと孤児削除の選択
  4. 04大規模コレクションとフェッチ結合への対応
  5. 05複数エンティティマネージャーの利用

活用シーン

  1. 01Doctrineの関連を新たにマッピング
  2. 02永続化されない関連の修正
  3. 03子エンティティの削除方法の選択
  4. 04複数エンティティマネージャー間でのリポジトリ取得

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/dev-toolings/superpowers-symfony --skill doctrine-relations

インストール後、Claude Code で/doctrine-relationsを入力して読み込まれたか確認します。

同梱ファイルreference.md

詳細

Doctrine の関連(Symfony)

使用する場面

  • ManyToOne、OneToMany、ManyToMany、OneToOne をマッピングし、所有側を選択するとき。
  • 子エンティティに cascade と orphanRemoval のどちらを使うか決めるとき。
  • 関連が永続化されない(逆側だけを設定している)、または大きな逆側コレクションで contains() が遅いとき。
  • 複数のエンティティマネージャーにエンティティを分けるとき。

デフォルトのワークフロー

  1. 所有側(外部キーを保持する、inversedBy を指定した ManyToOne)と、逆側(mappedBy を指定した OneToMany)を選びます。
  2. コンストラクターで ArrayCollection を使ってコレクションを初期化し、両側の整合性を保つ addX() と removeX() ヘルパーを作成します。
  3. 集約をまとめて保存する場合は cascade: ['persist'] を使用し、真のコンポジションに限って orphanRemoval: true を使用します。
  4. 大きな逆側コレクションには fetch: 'EXTRA_LAZY' を指定するか、所有側からメンバーシップをテストします。
  5. ユースケースで関連を読み取る場合は、N+1 クエリを避けるためにフェッチ結合を追加します。
  6. 複数のエンティティマネージャーを使う場合、各エンティティセットを単一のマネージャーにまとめ、ManagerRegistry を通じてリポジトリを取得します。

ガードレール

  • Doctrine が永続化するのは所有側が保持する内容です。必ず ManyToOne の参照を設定してください。
  • 大きなコレクションで cascade: ['remove'] を使うのは避けてください(行ごとに DELETE が実行されます)。共有エンティティには orphanRemoval を決して使わないでください。
  • 2 つのエンティティマネージャーにまたがる関連は作成できません。
  • デフォルト以外のエンティティマネージャーでは、ManagerRegistry::getRepository(Entity::class, 'name') を使ってリポジトリを取得してください。

段階的な情報開示

  • 実行時の基本方針とリスク管理には、このファイルを使用します。
  • 実装の詳細を確認する必要がある場合は、リファレンスを開いてください。

出力仕様

  • 所有側と逆側、cascade と orphan の判断を含むエンティティマッピング。
  • 大きなコレクションと頻繁に使われる処理経路のフェッチ戦略。
  • doctrine:schema:validate の結果。

リファレンス

  • reference.md

コメント