3 つのエンティティがあります。 「ボルドー」、「スタジエール」、「ボルドースタジエール」。
新しい Bordereau を作成する複数ステップのフォームを作成しました。選択した「Stigiaires」をユーザーに表示して検証する必要があります。 Bordereau と Stagiaire はどちらもテーブル BordereauStagiaire を通じてリンクされています。
新しい Bordereau フォームを使用して、コントローラーで Bordereau と Stagiaire ID を取得することができました。しかし、新しい Bordereau が作成されたときに、新しい BordereauStagiaire を作成する方法を探しています。
これは私が実践し始めた方法です。バックエンドでは、最初にボーダーローが作成され、次に新しいボーダーローと選択されたステージで BS が作成されます。 BS テーブルには、Bordereau id、Stagiaire id、および amount (別の属性) があります。
Bordereau の ID とフォームから取得した Stagiaire の ID を使用して、新しい BordereauStagiaire を作成するにはどうすればよいですか?
これは私のコントローラーです
リーリーこれは、フォームからデータを取得する方法ですphp $form['stagiaire']->getData()[0]->getId()
および bordereau、Flush を永続化した後にその ID を取得しますデータベースに。php $formBordereau->getId()
私が書いたのは回答ですが、むしろ大量のテキストを含むコメントのようなものでした。
まず第一に、英語の名前付き変数のみを使用し、少なくとも
create
のような操作名にbordereau
を使用しないことをお勧めします。次に、使用する変数に名前を付けます。
$formBordereau
はフォームではなく、エンティティであるため、$bordereau
のみを使用してください。それでは、このエンティティ
BordereauStagiaire
が必要ですか?これがManyToMany
関係であることはわかっています。Symfony と Doctrine はエンティティを通じて直接管理します。この 3 番目のエンティティは必要ありません。Doctrine は ORM です。つまり、オブジェクトのみを操作でき、ID は操作できません。リレーションシップを正しく設計すると、
Bordereau
エンティティにメソッドaddStagiaire
が存在するはずです。その逆も同様です。次に、次のオブジェクトを使用してこのメソッドを呼び出す必要があります:
リーリー