2013-10-13 44 views
1

我有一個模型協會,主要如下:CakePHP的分頁上中可容納的關係

Users hasAndBelongsToMany Tags 

我希望能夠進行分頁一組基於其標籤的用戶。用戶可以有多個標籤,並且所請求的過濾器可能很複雜,即查詢可以要求所有標籤爲AB但不是C的用戶。通過在標籤上使用分頁(以便condiditions數組可以應用到標籤模型)並找回位於該標籤子集內的用戶,可以更方便地處理此問題。

$this->paginate = array(
    'conditions' => $conditions, 
    'contain' => array('User'), 
    'limit' => 5, 
); 

$this->paginate('Tag') 

所以後來分頁究竟是幹什麼的預期,它返回一個基於標籤分頁的陣列,但什麼:試圖分頁的時候,因爲我的設置遵循了分頁

問題然後是我想要的是由用戶分頁。將分頁轉換爲依賴於用戶的問題會產生自己的問題('我之前使用的是')。只有分頁模式存在這樣的關係?我覺得這是cakephp可能會做的事情。感謝任何有幫助的人。

+0

可以切換它的其他方式,把一個條件,所以選擇通過'它'Tag' User'? –

+0

@scrowler不,我試過了,它創造了自己的一套問題。這是一種解決方法,我認爲必須發生的是我需要重寫分頁方法,但我不確定如何執行此操作。 – usumoio

+0

很酷,祝你好運! –

回答

1

將此放入模型中。

function paginateCount($conditions = null, $recursive = 0, $extra = array()) { 
     $parameters = compact('conditions'); 
     $this->recursive = $recursive; 
     $count = $this->find('count', array_merge($parameters, $extra)); 
     if (isset($extra['group'])) { 
      $count = $this->getAffectedRows(); 
     } 
     return $count; 
    } 
+0

好的,這看起來很有趣也很有用。我正在尋找如何調用這個paginateCount方法。我將如何確保使用這個而不是Cake的? – usumoio

1

你應該使用自定義查找:cakephp documentation link。在您例如,在用戶創建模型的保護功能:

protected function _findUsersByTag($state, $query, $results = array()) { 
    if($state == 'before') { 
     $query['joins'] = array(
      'Tag' => array('type' => 'inner', 'alias' => 'Tag', 'table' => 'tags', 'conditions' => array('Users.tag_id = Tag.id') 
     ); 
    return $query; 
    } 

    return $results; 
} 

二中添加用戶型號:

public $findMethods = array('usersByTag' => true); 

而且在你definie控制器您分頁使用索引0陣列或使用自定義搜索器2.3並呼籲findType higther蛋糕版本屬性:

public $pagination = array('User' => array(
    'usersByTag', 
    'limit' => 5, 
    'conditions' => $conditions 
));