2012-05-08 75 views
0

您好我現在用用笨DataMapper的,真正需要在模型類(DataMapper的模型類)DataMapper的自我關係模型

一些幫助定義關係,我怎麼會寫這個模型關係。稍微困惑的自我關係,即菜單項和子菜單

菜單有許多子菜單和子菜單可以有一個或多個子子菜單

 
Class: navigation 
Table: Navigation 
[id] [parent_id] [Name] .. 

感謝

回答

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一起工作,在特定位置插入新記錄樹等)。