0
您好我現在用用笨DataMapper的,真正需要在模型類(DataMapper的模型類)DataMapper的自我關係模型
一些幫助定義關係,我怎麼會寫這個模型關係。稍微困惑的自我關係,即菜單項和子菜單
菜單有許多子菜單和子菜單可以有一個或多個子子菜單
Class: navigation Table: Navigation [id] [parent_id] [Name] ..
感謝
您好我現在用用笨DataMapper的,真正需要在模型類(DataMapper的模型類)DataMapper的自我關係模型
一些幫助定義關係,我怎麼會寫這個模型關係。稍微困惑的自我關係,即菜單項和子菜單
菜單有許多子菜單和子菜單可以有一個或多個子子菜單
Class: navigation Table: Navigation [id] [parent_id] [Name] ..
感謝
這是一個一對一很多關係(一個項目有一個父母,一個父母可以有很多項目)。
所以,你的模型將如下所示:
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一起工作,在特定位置插入新記錄樹等)。