私は Symfony2 フォームを使用していますが、「親/子」タイプの多対多の「自己参照」関係を作成できる中間クラス フォームを埋め込む方法を見つけることができませんでした。例: 「PersonParent」クラスを介してそれ自体に関連付けられている「Person」クラス。xml スキーマは次のようになります。
<table name="person">
<column name="id" type="INTEGER" primaryKey="true" autoIncrement="true" required="true"/>
<column name="name" type="VARCHAR" size="100" required="true"/>
</table>
<table name="person_parent">
<column name="person_id" type="INTEGER" primaryKey="true" required="true"/>
<column name="parent_id" type="INTEGER" primaryKey="true" required="true"/>
<foreign-key foreignTable="person" onDelete="CASCADE">
<reference local="person_id" foreign="id"/>
</foreign-key>
<foreign-key foreignTable="person" onDelete="CASCADE">
<reference local="parent_id" foreign="id"/>
</foreign-key>
</table>
私はドクトリンの代わりに PropelBundle を使用していますが、ドクトリンを使用している場合でも、この問題について私にリードを与えることができるかもしれません。目前の関係は、埋め込みを必要とせずに「Person」オブジェクト フォームから直接「Friend」オブジェクトを取得/設定するメソッドを作成する EqualNest 動作がある「Friend like」関係と同じではないことに注意してください。中間の「PersonParentType」クラス フォーム。
「PersonParentsRelatedByPersonId」オブジェクトを追加できるように PersonType フォームに PersonParentType フォームを埋め込みながら、setPersonParentsRelatedByPersonId のような Propel 生成メソッドを使用しようとしましたが、問題は、PersonParentType フォームで「person_id」を定義する方法がわからないことです。 "person_id" は新しい Person にはまだ利用できないためです。PersonParentType に「parent_id」のフィールドのみを追加すると、「person_id」が欠落しているため、「Not null 違反」になります。
何か案は?この質問は関連していますが、これを処理するための Propel ビヘイビアーの存在について問い合わせた以前の質問とは範囲が異なります。