データベースに次の関連付けがあります (簡易版):
これは多対多の関連付けですが、結合テーブルに属性があるため、One-To-Many/Many-To-One associations を使用する必要があります。
1 つの注文項目に必要な数のリレーションを追加して同時に作成できるフォームがあります (主に、ドキュメントのフォームのコレクションを埋め込む方法のチュートリアルに触発されました。
フォームを投稿すると、次のエラーが表示されます。
タイプ TEST\MyBundle\Entity\Relation のエンティティは、外部エンティティ TEST\MyBundle\Entity\Order を介して ID を持っていますが、このエンティティ自体には ID がありません。「TEST\MyBundle\Entity\Relation」を永続化する前に、関連するエンティティで EntityManager#persist() を呼び出し、識別子が生成されていることを確認する必要があります。Post Insert ID Generation (MySQL Auto-Increment や PostgreSQL SERIAL など) の場合、これは両方の永続操作の間に EntityManager#flush() を呼び出す必要があることを意味します。
リレーションにオプションRelation
があるため、Doctrine は注文に関連するオブジェクトを永続化しようとするため、このエラーを理解しています。しかし、どうすればこの動作を回避できますか?cascade={"persist"}
OneToMany
エンティティを削除cascade={"persist"}
して手動で永続化しようとしましたが、同じエラーが発生します ( flush()
ID を取得するために注文する必要があり、注文すると同じエラー メッセージが表示されるため)。の前のオブジェクト
も試してみましたが、うまくいきませんでした。detach()
Relation
flush()