【问题标题】:Codeigniter 2 + Datamapper ORM: Adjacency Lists, how to set model relation for it?Codeigniter 2 + Datamapper ORM:邻接列表,如何设置模型关系?
【发布时间】:2011-09-22 04:39:00
【问题描述】:

问:当使用 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 有经验,并且愿意留下一个关于如何做到这一点的实际示例,我将不胜感激!

感谢您的宝贵时间!

【问题讨论】:

    标签: codeigniter orm datamapper adjacency-list codeigniter-datamapper


    【解决方案1】:

    (注意:自从我将统治权交给 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;
    }
    

    有关保存此类关系的更多信息,请参阅http://datamapper.wanwizard.eu/pages/save.html#Advanced

    2) 假设每个顶点需要多个边

    这是一个复杂得多的示例,但它主要涉及创建一个专用对象来表示关系,因为 DataMapper 不允许两个对象在每个关系类型中多次关联。

    如果你想要这个例子,请告诉我,我会写一些东西,或者查看http://datamapper.wanwizard.eu/pages/troubleshooting.html#Relationships.NtoM

    【讨论】:

    猜你喜欢
    • 2015-12-28
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    相关资源
    最近更新 更多