2010-01-07 47 views
0

我有以下型号: - 议程(ID,USER_ID,EVENT_ID) - >属于关联的事件,用户 - 事件(ID等) - >的hasMany议程 - 用户(ID,city_id等) - >的hasMany议程,属于关联市 - 市(ID,姓名) - >用户的hasMany访问第三届协会

虽然在议程控制器,我想显示在他的议程有一定的事项标识用户的City.name。我如何将City数据添加到Agendas数组的用户数组中?

N.B.我不想使用递归2,因为它将大量数据加载到数组中。

回答

2

你最好的选择看起来是CakePHP的中容纳行为http://book.cakephp.org/view/474/Containable

它允许你限制返回相关的模型数据 - 它基本上有递归2中能够找到深刻的关联数据的权力,但有更好的性能和更清洁,因为它只给你你需要的数据。

类似下面的代码应该返回用户数据中的City数据,包括event_id的条件。

$this->Agenda->find('all', array(
    'contain' => array(
     'User' => array(
      'City' 
     ), 
    ), 
    'conditions' => array(
     'Agenda.event_id' => $event_id 
    ) 
)); 

只是为了完成该代码段,确保var $actsAs = array('Containable');是在模型的顶部(或者,如果你想所有型号访问的中容纳的行为app_model.php)

+0

伟大的回答,非常齐全!当我第一次发现Containable时,我感到欣喜若狂。这是很常见的,我认为它需要在许多Cake教程中强调,通常不是。 – 2010-01-07 16:26:48