2012-06-25 72 views
0

分頁我有以下關係:CakePHP的2.0:使用具有的hasMany和HABTM

張貼的hasMany評論

郵政屬於關聯類別

後HABTM標籤

我想使用分頁方法具有以下屬性:

public $paginate = array(
    'published', 
    'limit' => 3, 
    'fields' => array(
     'Post.title', 
     'Post.date_published', 
     'Post.abstract', 
     'Post.slug', 
     'Category.value', 
     'Category.slug' 
    ) 
); 

'published'是一個自定義查找查詢,但這不應該在這裏。 除了有關帖子及其類別的信息(見上文),我還想獲取帖子的COUNT條評論以及所有標籤的名稱。即,我希望能夠以便捷的方式訪問View端的數據,例如$ data ['Post'] ['comment_count']和$ data ['Post'] ['Tag'] [0] ['名稱']。

有沒有解決方案,這是足夠優雅?我知道HABTM可能有點複雜,但我甚至不知道如何在同一個查詢中獲取評論,儘管它只是一個hasMany關係。謝謝。

回答

0

我發現,在評價模型使用counterCache參數如下

public $belongsTo = array('Post' => array('counterCache' => true)); 

並添加comments_count領域的職位表提取評論的帖子數量最簡單的解決方案。這將在添加或刪除新評論時更新表格。

關於標籤,我使用包含數組,它也可以用於分頁。我用這樣的:

$this -> paginate = array(
     'published', 
     'limit' => 3, 
     'contain' => array(
      'Category', 
      'Tag' => array('fields' => array(
        'value', 
        'slug' 
       )) 
     ), 
     'fields' => array(
      'Post.title', 
      'Post.date_published', 
      'Post.abstract', 
      'Post.slug', 
      'Post.comment_count', 
      'Category.value', 
      'Category.slug' 
     ), 
     'conditions' => $conditions, 
     'joins' => $joins 
    ); 

做它像這樣,僅類別和領域值和標籤模型的蛞蝓是獲取與每一個崗位的要求。

有一種特殊情況,當我想要獲取具有特定標籤的所有帖子。請記住,這是一個HABTM關係。我碰到這個有用的模型方法by Geoff Garbers

它添加到AppModel來了,它允許調用hasAndBelongsToMany,並自動定義的繁瑣過程加入了PAGINATE方法。

$joins = $this -> Post -> generateHabtmJoin('Tag'); 

現在,它很容易可以定義如條件:正如你可以在上面看到,他們正在通過$加入數組,這與上面的方法產生這樣添加

$conditions = array('Tag.slug' => $this -> request -> params['tag']); 

哪隻會獲取具有某個Tag.slug的帖子。

希望這有助於人。