2012-01-09 134 views
0

這是我的情況,我有一個可以屬於多個類別的Post模型。這是我想通了怎麼辦:CakePHP - HABTM的關係和find()

class Post extends AppModel 
{ 
    var $hasAndBelongsToMany = array('Category'); 
} 

和類別模型:現在

class Category extends AppModel 
{ 
    var $hasAndBelongsToMany = array ('Post'); 
} 

,這一切工作正常和所有。但我就是無法弄清楚如何尋找屬於某一類別的職位,例如「新聞」與1號使用在:

class CategoriesController extends AppController { 
    function view ($id = 0) { 
     // doesnt work 
     $this->Category->Video->find ('all', array('conditions' => array('category_id' => $id)); 
    } 
} 

我一直試圖找到谷歌的答案和CookBook卻一無所獲。有誰知道這是如何實現的?

謝謝。

回答

2

當您在Category和Post模型上顯示關聯時,您正在執行視頻模型查找,而不是Video。假設這是一個錯字錯誤:

如果你想搜索,如你所說,帖子說是「新聞」類別做posts_controller.php:

$this->Post->Category->find('all', array('conditions'=>array('Category.name'=>'News'))); 

還是在categories_controller.php

$this->Category->find('all', array('conditions'=>array('Category.name'=>'News'))); 
+0

謝謝,這有效,但有一個問題:郵政模型屬於用戶。但是在我的方法列表中,沒有提供關聯的用戶名和用戶數據。這是打算像這樣工作還是可以通過其他方式獲得?否則,很好的答案,也很快。 :) – vanneto 2012-01-09 17:59:03

+1

在查找方法的參數數組中添加'recursive'=> 2它應該足夠了 – kaklon 2012-01-09 18:21:06

+0

工作:)但是還有一件事要說用戶瀏覽一個類別。現在,他希望按照ASC的日期排序。這可以在類別控制器中完成,還是必須在新聞控制器中完成? – vanneto 2012-01-09 19:26:23

0

你可以做哪些工作應該如下:

$this->Category->bindModel(array(
     'hasOne' => array(
      'CategoriesVideo' 
     ), 
    )); 
    return $this->Video->find('all', array(
     'conditions' => array(
      'CategoriesVideo.category_id' => $id, 
      ), 
     ), 
    )); 

編輯:對不起,一直在尋找在錯誤的代碼。這應該工作。

+0

這是行不通的。您無法針對像這樣的HABTM關係進行查詢。 – Dave 2012-01-09 13:45:36

0

你最簡單的選擇是將搜索類別本身,並允許recursive水平也返回相關的帖子(或影片,或者無論你做什麼):

//in the category controller 
$this->Category->find('all', array('conditions'=>array('Category.id'=>$id)); 

對於HABTM數據搜索有很多選項,但上面的是最簡單的。

下面是CakePHP的書,描述了不同的方式來查詢針對HABTM關係頁面:

http://book.cakephp.org/1.3/view/1044/hasAndBelongsToMany-HABTM