2011-01-20 4 views
0

저는 1.3 버전을 사용하여 CakePHP (및 프레임 워크 전반)을 처음 접했고 관련성이 높고 유용한/Cake의 문서, stackoverflow 또는 도움이되지 않는 결과를 낳은 무수히 많은 Google 검색에서 어느 곳에서든 명확한 설명을 할 수 있습니다. 저의 약한 두뇌는 하나의 조각을 함께 만들려고하지 않고 특정 솔루션을 숟가락으로 먹여야 할 수도 있습니다 여러 가지 예를 들자면, 나는 실종되었으므로 어떤 도움을 주시면 감사하겠습니다! 내 상황은 다음과 같습니다 :paginate 필터는 관련없는 모델의 데이터를 참조하여 CakePHP를 생성합니다.

내 신청서는 교회 자원 관리를위한 것입니다. 사용자의 위치를 ​​기반으로 사용자에게 리소스를 표시해야합니다 (자세한 내용은 초 단위입니다.) 사용자의 위치는 사용자가 어느 교회에 소속되어 있으며 어떤 교회가 속한 지에 따라 다릅니다. 자원은 지역에 속하기 때문에 나는 내가 users에 대한 테이블, churches, districts이 내 데이터베이스에서 지구 A.

에 속하는 지구 자원 만의 사용자, 그리고 items (일명 개인 "자원을 표시하려면 "), 그러나 다른 이들은 내 문제와 관련된 유일한 것입니다. 따라서 User, Church, DistrictItem에 대한 모델도 있습니다. 관계는 thusly 히 정의됩니다

District hasMany Church 
District hasMany Item 
Church hasMany User 
Church belongsTo District 
User belongsTo Church 
Item belongsTo District 

당신이 볼 수 있듯이,이 ItemUser 사이에 정의 된 직접적인 관계는 없지만, 내가 뭘해야 기본적으로 이것이다 : 분명이 작동하지 않습니다

$items = $this->paginate(array('Item.district_id LIKE' => 'User.district_id')); 

의도대로 그리고 그냥 빈 배열을 내보기에 건네 준다.

내 데이터베이스에는 테이블에 필드가 없습니다. 사용자의 모든 지구와의 연결은 User->Church.district_id 관계로 이루어집니다. User 모델을 items_controller.php으로 참조 할 수 없으므로 오류가 발생하여 사용자의 지구를 직접 알 수 있습니다. "Containable behaviour"를 사용해 보았지만, Contain가 필요한 경로라고 생각합니다. 나는 그것을 작동시키기 위해 모든 것을 함께 집어 넣는 방법을 알아낼 수 없다. 아래는 관련 코드입니다. 지금까지 가지고있는 관련 코드는 items_controller.php입니다. 관련 항목 만 나열하려고 할 때 베어 본 (barebones)입니다 ... 나중에 검색을 포함 시키겠습니다. 나는 단지 그것이 현재 가장 기본적인 수준에서 작동하도록 할 수 있다는 것을 알아야합니다.

items_controller.php

function admin_manager() { 
    $this->paginate['Item'] = array(
     'contain' => array('User'), 
     'order' => 'Item.name' 
    ); 
    $items = $this->paginate(array('Item.district_id LIKE' => 'User.district_id')); 
    $this->set('items', $items); 
} 

도와 주셔서 감사합니다 순전히, 나는 겸손하게 당신이 어떤 예제와 함께 가능한 한 구체적으로 바랍니다.

답변

-1

User 모델의 모델이 district_id 인 이유는 무엇입니까? User belongsTo를 Church belongsTo를 District hasMany의 경우 Item 다음 Userchurch_id (가정 User hasOne의 Church)을 가질 것이다.

그럼 당신이 시도 할 수 :

$conditions = array('Item.district_id'=>'Church.district_id','User.church_id'=>'Church.id'); 
$this->set('items',$this->paginate($this->Item->District->Church, $conditions));