0

嗨,我正在将 CodeIgniter 与 DataMapper 一起使用,并且确实需要一些帮助来定义模型类(DataMapper 模型类)中的关系

我将如何为此编写模型关系。对 Self 关系有点困惑,即菜单项和子菜单

菜单有许多子菜单,子菜单可以有一个或多个子子菜单

类别:导航
表:导航
[id] [parent_id] [名称] ..

谢谢

4

1 回答 1

1

这是一对多的关系(一个项目有一个父项,一个父项可以有许多项)。

所以你的模型看起来像:

class Menu extends DataMapper {

    public $has_one = array(
        'parent' => array(
            'class' => 'menu',
        ),
    );

    public $has_many = array(
        'menu' => array(
            'class' => 'menu',
                'other_field' => 'parent',
        ),
    );

}

这将允许您这样做:

// assume your tree root has parent id 0
$root = new Menu();
$root->where('parent_id', 0)->get();

// get the first level menu from the root
$submenu = $root->menu->get();

// get the parent from the first submenu entry (should be root again)
$rootagain = $submenu->parent->get();

请注意(正如我已经在 CI 论坛上回答的那样)这不是一个非常理想的解决方案,因为一棵树可以是多个嵌套级别,使用此设置意味着必须进行迭代,因为您一次只能检索一个级别,并且为单亲。这将成为任何大小树的噩梦。

查看 nestedsets 扩展,它将允许您在表中构建嵌套集树,并将方法添加到 Datamapper 以操作这些集(例如使用父母、孩子、syblings,在树中的特定位置插入新记录等)。

于 2012-05-09T20:27:57.907 回答