2015-12-11 1 views
1

я несколько таблиц, связанных друг с другим наименованием модели ниже:CakePHP assocations глубокого уровня в 2 раза

  1. Меню
  2. SubMenu
  3. Опция

SubMenu имеет menu_id,

Опция имеет submenu_id

Я хочу показать Menu> SubMenu> Option.

Как я могу сделать эту ассоциацию 3-го уровня?

ответ

0

Сначала вы должны установить правильные ассоциации в моделях. В Menu модели (я предполагаю, что у вас есть правильные внешние ключи Настройка):

public $hasMany = array('SubMenu'); 

в SubMenu:

public $hasMany = array('Option'); 
public $belongsTo= array('Menu'); 

в Option модели:

public $belongsTo= array('SubMenu'); 

И тогда вы можете сделать это (в модели):

$this->find(...); 

Используйте Containable и ограничивайте поля, которые хотите использовать.

Подробнее о model associations.

2

Ваш лучший вариант - использовать поведение Containable.

Я понимаю, что ваши отношения уже определены в классах модели.

В вашем MenuControllers действии, добавьте

$this->Menu->contain(array(
     'SubMenu'=>array(
      'Option' 
     ) 
    )); 

непосредственно перед

$menus=$this->Menu->find(); 

Не забудьте загрузить поведение в модели:

class Menu extends AppModel { 
    public $actsAs = array('Containable'); 
} 

Или позвонив по телефону в вашем действие:

$this->Menu->Behaviors->load('Containable'); 
0

$ this-> Menu-> bindModel (array ('hasMany' => array ('submenu' => array ('className' => 'submenu', 'foreignKey' => 'menu_id'))));
$ this-> submenu-> bindModel (array ('hasMany' => array ('option' => array ('className' => 'option', 'foreignKey' => 'submenu_id')))); '

Смежные вопросы