问:使用Datamapper ORM时,如何为邻接列表设置模型。谁有经验?例如,表类别(id,name,has_parent_category_id)。谢谢你的期待!
示例表,
Tbl Category
id | name | has_parent_category_id
1 | catA | 0
2 | catB | 0
3 | catC | 1
4 | catD | 2
5 | catE | 3
文档位于http://datamapper.wanwizard.eu/pages/advancedrelations.html,我发现了以下“自我关系”。我不确定这是不是正确的方法!我正在测试它。
如果有人对邻接列表,codeigniters Datamapper ORM有经验,并且会介意留下一个如何做到这一点的实际例子,我将不胜感激!
谢谢你的时间!
答案 0 :(得分:0)
(注意:自从我将统治权移交给WanWizard以来,我没有使用过DataMapper,但我保留了DMZ很长一段时间。)
我看到两种可能的解决方案:
对于每个顶点对的单个边缘,您不需要做任何特殊的操作。只需创建一个新的标准自我关系(即:一个命名的自我关系)来表示连接:
$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。
这是一个更复杂的示例,但它主要涉及创建一个专用对象来表示关系,因为DataMapper不允许两个对象多次关联每种关系类型。 / p>
如果你想要这个例子,请告诉我,我会写一些内容,或查看http://datamapper.wanwizard.eu/pages/troubleshooting.html#Relationships.NtoM