2010-01-07 4 views
0

액세스 I가 다음 모델 : - 의제 (ID 266 EVENT_ID) -> belongsTo를 이벤트, 사용자 - 이벤트 (ID 등) -> hasMany의 의제 - 사용자 (아이디, CITY_ID 등) - > hasmany Agenda, 도시에 속함 - City (id, name) -> hasmany 사용자가 3 협회

Agendas 컨트롤러에있는 동안 Agendas에 특정 event_id가있는 사용자의 City.name을 표시하려고합니다. 어떻게 Agendas 배열의 User 배열에 City 데이터를 추가 할 수 있습니까?

N.B. 재귀 2를 사용하지 않으려는 것은 많은 데이터를 배열로로드하기 때문입니다.

답변

2

당신의 최선의 선택은 그것은 당신이 반환되는 관련 모델 데이터를 제한 할 수 있습니다 CakePHP의 함유 성 행동 http://book.cakephp.org/view/474/Containable

것으로 보인다 - 그것은 기본적 깊은 관련 데이터를 찾을 수있는 재귀 2의 힘이있다, 그러나 필요한 데이터 만 제공하므로 성능이 훨씬 뛰어나고 더욱 깨끗합니다.

다음 코드와 같은 것은 event 데이터의 조건을 포함하여 사용자 데이터 내의 도시 데이터를 반환해야합니다.

$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 튜토리얼에서 강조 할 필요가 있다고 생각합니다. 일반적으로 그렇지 않습니다. –