2010-01-07 45 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