2011-01-20 93 views
0

我對CakePHP(以及通常的框架)使用1.3版本來說很陌生,並且遇到了一堵我似乎無法找到相關/有用/任何地方都可以得到明確的解釋(無論是在Cake的文檔中,在計算器上,還是在搜索結果不盡人意的Google搜索中)。這可能只是因爲我的軟弱大腦需要用一種特定的解決方案來提供補充,而不是試圖將它們拼湊在一起從各種各樣的例子大雜燴,但我很茫然,所以任何幫助深表謝意!我的情況是這樣的:通過引用無關模型的數據在CakePHP中過濾分頁結果

我的申請是教會資源管理。我需要根據用戶的「位置」向用戶顯示資源(更多詳情,請參見第1章)。用戶位置的分配方式取決於他們屬於哪個教會,並依次指定教會屬於哪個區域。該資源屬於區,因此,我想,以顯示A區只有資源的用戶屬於區A.

在我的數據庫我有users表,churchesdistrictsitems(又名個人「資源「)等等,但這些是唯一與我的問題有關的問題。因此,我也有User,Church,DistrictItem的型號。關係正是如此定義:

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')); 

顯然,這不工作如預期的那樣,只是導致一個空陣列被遞交給我的觀點。

請注意,在我的數據庫中,users表沒有district_id字段 - 通過User->Church.district_id關係可以創建與用戶所在區域的所有關聯。我無法參考items_controller.php中的User模型直接獲取用戶所在的區域,因爲它只是吐出一個錯誤。我嘗試過使用「Containable行爲」無濟於事,但我有一種感覺,Contain是我需要採取的路線。我似乎無法弄清楚如何把它放在一起才能使它工作。以下是我在items_controller.php迄今爲止的相關代碼 - 目前它只是準系統,因爲我只是想讓它只列出相關的項目...我將在後麪包括搜索和其他所有內容。我只需要知道我現在可以在最基本的層面上工作。

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所屬的爲Church所屬的爲District hasMany Item那麼您的User將具有church_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));