2012-05-08 2 views
0

Привет Я использую CodeIgniter с 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, вставка новых записей в определенных местах в дерево и т. д.).