私は PropelBundle で Symfony2 を使用しており、次のスキーマがあるとしましょう:
<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"/>
</table>
親が多くの子「人」を持つことができるように、人は多くの「親」を持つことができると考えてください。「person_parent」テーブルの両方の列は、「person」テーブルへの外部キーです。テーブル「book_author」のスキーマで isCrossRef="true" を設定できる Book/Author のような関係とは異なり、Propel は直接 author クラスから book オブジェクトを取得/設定/追加するためのメソッドを生成できます。 isCrossRef="true" を設定することはできないため、"Person" オブジェクトから直接親の Person オブジェクトを取得/設定/追加することはできません。つまり、次のことはできません。
$person = new Person();
$person->setPersonParents($personCollection);
特定の人のすべての親「Person」オブジェクトを設定するメソッド「setPersonParents()」は使用できません。ただし、author_book のように同じテーブルを参照しないクロス テーブルの場合、isCrossRef="true" を設定すると、次のことが可能になります。
$author = new Author();
$author->setBooks($bookCollection);
それを念頭に置いて、「新しい人」フォームで人の「親」を直接選択することもできません...
友人のような関係には、次のことを可能にするEqualNestBehaviorがあります。
$person = new Person();
$person->setFriends($personCollection);
ただし、階層を気にしないため、その動作は親子関係には適用できないようです (特定の「人」の「親」を取得しようとすると、その「人」の「子」がすべて取得されます)。その「親」に加えて...)。これは、人の友人がその人の友人でもある「友人のような」関係に期待される動作です。
親/子の場合にEqualNestBehaviorを使用する方法はありますか? または、この種の関係を処理するための他の Propel 動作またはメソッドはありますか?