2009-09-23 103 views
3

我在使用HABTM關係創建分頁時遇到了一些問題。首先,表和關係:CakePHP分頁與HABTM模型

requests (id, to_location_id, from_location_id) 
locations (id, name) 
items_locations (id, item_id, location_id) 
items (id, name) 

因此,請求具有地理位置的請求從來和位置的請求會。對於這個問題,我只關心「到」位置。

Request --belongsTo--> Location* --hasAndBelongsToMany--> Item 

(* as "ToLocation") 

在我的RequestController中,我想分頁處理Request的ToLocation中的所有項目。

// RequestsController 
var $paginate = array(
    'Item' => array(
     'limit' => 5, 
     'contain' => array(
      "Location" 
     ) 
    ) 
); 

// RequestController::add() 
$locationId = 21; 
$items = $this->paginate('Item', array(
    "Location.id" => $locationId 
)); 

,這是失敗的,因爲它是產生這個SQL:

SELECT COUNT(*) AS count FROM items Item WHERE Location.id = 21 

我無法弄清楚如何使實際使用的$paginate的「遏制」的說法...

任何想法?

回答

1

我已經能夠在某種程度上工作,但該解決方案根本不覺得非常cakey。

$items = $this->paginate(
    $this->Request->ToLocation->Item, 
    array(
     "Item.id IN (" 
     . "SELECT item_id FROM items_locations " 
     . "WHERE location_id = " . $locationId 
     . ")" 
    ) 
); 
+0

這是唯一爲我工作,具有HABTM表中的非約定字段名的方式。 – 2017-03-17 13:10:16

3

進行分頁HABTM,需要臨時綁定 'hasOne' 加入模型到模型,你分頁:

// prepare to paginate Item 
$this->Item->bindModel(array('hasOne'=>array('ItemsLocation'))); 
$contain['ItemsLocation']=array(); 
$conditions[]=array('ItemsLocation.location_id'=>$locationId); 
$order = array('Item.created' => 'desc'); // set order 
... 
$items = $this->paginate('Item', compact('conditions','contain','order')); 
+0

這實際上不起作用。 'paginate()'* only *的第二個參數需要條件。額外的東西需要添加到'$ this-> paginate'數組中。 – nickf 2009-09-29 06:37:39

+1

哦,人..你不能閱讀關於分頁的文檔?這裏正確編輯我的項目爲您的情況: $ this-> paginate ['Item'] = compact('contains','conditions','order'); $ items = $ this-> paginate('Item'); – Sergei 2009-09-30 05:30:58

11

後3天搜索,我找到了辦法

var $paginate = array('Post'=>array('group'=>'Post.id')); 

建議添加羣組,因爲有時我們會獲得不同類別的重複帖子

$this->Post->bindModel(array('hasOne'=>array('CategoriesPost')), false); 
$out = $this->paginate('Post', array('CategoriesPost.category_id'=>array(1,4,7,6))); 

添加使用綁定模式,所有的查詢,不但以下

+0

是否有限制分頁結果的技巧?我似乎無法得到這個工作 – 2012-06-25 10:12:50