Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Codeigniter 代码点火器2+;Datamapper ORM:邻接列表,如何为其设置模型关系?_Codeigniter_Orm_Datamapper_Adjacency List_Codeigniter Datamapper - Fatal编程技术网

Codeigniter 代码点火器2+;Datamapper ORM:邻接列表,如何为其设置模型关系?

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 文档在中,我发现了以下“自我关系”。我不确定这是不是正确的方法!我正在

问:当使用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
文档在中,我发现了以下“自我关系”。我不确定这是不是正确的方法!我正在测试它

如果有人对邻接列表、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不允许两个对象在每个关系类型中关联一次以上


如果你想要这个例子,让我知道,我会写一些东西,或者检查一下

你能检查一下这个问题吗?非常感谢您能检查一下这个问题吗?非常感谢