(注: WanWizard に管理を渡して以来、DataMapper はあまり使用していませんが、かなり長い間 DMZ を維持していました。)
考えられる解決策は 2 つあります。
1) 任意の 2 つの頂点が 1 つの共通エッジしか持てないと仮定する
頂点ペアごとに 1 つのエッジの場合、特別なことをする必要はありません。接続を表す新しい標準の自己関係 (つまり、名前付きの関係) を作成するだけです。
$has_many = array(
'parent_category' => array(
'class' => 'category'
'other_field' => 'category'
),
'category' => array(
'other_field' => 'parent_category'
)
);
次に、次のように結合テーブルを作成します。
name: categories_parent_categories
columns: id | category_id | parent_category_id
これで、次のようにエッジを簡単に作成できます。
$catA = new Category()
$catA->name = 'catA';
$catA->save();
$catB = new Category();
$catB->name = 'catB';
$catB->save();
$catA->save('parent_category', $catB);
// OR
$catA->save_parent_category($catB);
$catA->parent_category->get();
foreach($catA->parent_category as $parent) {
echo $parent->name;
}
この種の関係の保存について詳しくは、 http://datamapper.wanwizard.eu/pages/save.html#Advancedを参照してください。
2) 頂点ごとに複数のエッジが必要であると仮定する
これははるかに複雑な例ですが、基本的には関係を表す専用のオブジェクトを作成する必要があります。これは、DataMapper では関係タイプごとに 2 つのオブジェクトを複数回関連付けることができないためです。
この例が必要な場合は、お知らせください。何かを書くか、http://datamapper.wanwizard.eu/pages/troubleshooting.html#Relationships.NtoM をチェックしてください。