Codeigniter 代码点火器2+;Datamapper ORM:邻接列表,如何为其设置模型关系?
问:当使用DataMapperORM时,如何为邻接列表设置模型。有经验的人吗?例如,表类别(id、name、has\u parent\u Category\u id)。谢谢你的关注 示例表Codeigniter 代码点火器2+;Datamapper ORM:邻接列表,如何为其设置模型关系?,codeigniter,orm,datamapper,adjacency-list,codeigniter-datamapper,Codeigniter,Orm,Datamapper,Adjacency List,Codeigniter Datamapper,问:当使用DataMapperORM时,如何为邻接列表设置模型。有经验的人吗?例如,表类别(id、name、has\u parent\u Category\u id)。谢谢你的关注 示例表 Tbl Category id | name | has_parent_category_id 1 | catA | 0 2 | catB | 0 3 | catC | 1 4 | catD | 2 5 | catE | 3 文档在中,我发现了以下“自我关系”。我不确定这是不是正确的方法!我正在
Tbl Category
id | name | has_parent_category_id
1 | catA | 0
2 | catB | 0
3 | catC | 1
4 | catD | 2
5 | catE | 3
文档在中,我发现了以下“自我关系”。我不确定这是不是正确的方法!我正在测试它
如果有人对邻接列表、codeigniters Datamapper ORM有经验,并且介意留下一个关于如何实现这一点的实际示例,我将不胜感激
谢谢你的时间 (注意:自从我将统治权移交给WanWizard后,我没有太多使用DataMapper,但我维护DMZ已经有一段时间了。)
我认为有两种可能的解决办法:
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;
}
现在,您可以轻松地制作如下边缘:
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;
}
有关保存此类关系的更多信息,请参见
2) 假设每个顶点需要多条边
这是一个复杂得多的示例,但它基本上涉及到创建一个专用对象来表示关系,因为DataMapper不允许两个对象在每个关系类型中关联一次以上
如果您想要这个示例,请告诉我,我会写一些东西,或者查看一下(注意:自从我将控制权移交给WanWizard以来,我没有经常使用DataMapper,但我维护DMZ已经有一段时间了。)
我认为有两种可能的解决办法:
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;
}
现在,您可以轻松地制作如下边缘:
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;
}
有关保存此类关系的更多信息,请参见
2) 假设每个顶点需要多条边
这是一个复杂得多的示例,但它基本上涉及到创建一个专用对象来表示关系,因为DataMapper不允许两个对象在每个关系类型中关联一次以上
如果你想要这个例子,让我知道,我会写一些东西,或者检查一下你能检查一下这个问题吗?非常感谢您能检查一下这个问题吗?非常感谢