2013-01-14 65 views
1

我有兩個型號,PostTag這是建立在一個HABTM關係,像這樣當屬於後所有標籤:檢索編輯後

class Post extends AppModel { 
    public $hasAndBelongsToMany = array('Tag'); 
} 

class Tag extends AppModel {  
    public $hasAndBelongsToMany = array('Post'); 
} 

當編輯後,我想在輸入框中顯示屬於該帖子的所有標籤。

現在我有這個在我的職位控制器:

$this->set('tags', $this->Post->Tag->find('list')); 

但由於某些原因,它的返回標記,就是在tags表,而不是隻返回屬於該職位的人。

我該如何修改它才能檢索屬於我正在編輯的帖子的標籤?

回答

0

您使用find()函數的方式意味着您需要所有行標記表。

在你的模型:

class Post extends AppModel { 


/** 
* @see Model::$actsAs 
*/ 
    public $actsAs = array(
     'Containable', 
    ); 


     public $hasAndBelongsToMany = array('Tag'); 
} 

class Tag extends AppModel {  

/** 
* @see Model::$actsAs 
*/ 
    public $actsAs = array(
     'Containable', 
    ); 

    public $hasAndBelongsToMany = array('Post'); 
} 

您應該使用查找功能是這樣的:

$postWithTag = $this->Post->find('first', array('conditions' => array('Post.id' => $post_id),'contain'=>array('Tag'))); 

返回後與它的標籤。

,如果你只希望不交,你應該把屬於關聯關係的PostTag模型標籤:

class PostTag extends AppModel {  

/** 
* @see Model::$belongsTo 
*/ 
    public $belongsTo = array(
     'Post','Tag' 
    ); 
} 

然後使用查找功能是這樣的:

class PostController extends AppController { 

/** 
* @see Controller::$uses 
*/ 
    public $uses = array(
     'Post', 'PostTag' 
    ); 

    public function post(){ 

      /** 
      * Your code 
      */ 
      $tags = $this->PostTag->find('all', array('conditions' => array('PostTag.post_id' => $post_id))); 
      $this->set('tags',$tags); 
    }