2012-06-29 101 views
1

我有樹模型與此結構和表:CakePHP的嵌套包含

Rate: 
id, model_name, object_id 
1 , SocialPost, 12 
public $belongsTo => array(
       'SocialPost' => array(
        'className' => 'Social.SocialPost', 
        'foreignKey' => 'object_id', 
        'conditions' => array(
         'Rate.object_id = SocialPost.id', 
        ), 
       ) 
      ) 

SocialPost: ID,file_id的

public $hasOne = array(
    'File' => array(
     'className' => 'File', 
     'foreignKey' => false, 
     'conditions' => array(
      'File.id = SocialPost.file_id', 
     ), 
    ), 
); 

文件: ID,標題


所有樹型行爲可容納

此代碼的工作很好的SocialPostsController:

$posts = $this->SocialPost->find('all', array(
     'limit' => 5, 
     'contain' => array(
      'File' 
     ) 

    )); 

輸出:http://pastie.org/private/9ixxufncwlr3tofgp8ozw

但是這個代碼在RatesController返回同一個文件的所有SocialPost:

$mostRated = $this->Rate->find('all', array(
     'limit' => $count, 
     'contain' => array(
      'SocialPost' => array(
       'File' 
      ) 
     ) 

    )); 

輸出:http://pastie.org/private/lbqryo1gxgvxjb5omfwrw

什麼這裏錯了嗎?

回答

1

我覺得你的協會都應該屬於關聯:

class Rate extends AppModel { 
    public $belongsTo = array(
    'SocialPost' => array(
     'className' => 'Social.SocialPost', 
     'foreignKey' => 'object_id', 
    ) 
); 
} 

class SocialPost extends AppModel { 
    public $belongsTo = array(
    'File' 
); 
} 

然後你find命令可以關注一下:

$mostRated = $this->Rate->find('all', array(
    'limit' => $count, 
    'contain' => array(
    'SocialPost.File' 
) 
)); 

另外,我會仔細檢查你的'className' => 'Social.SocialPost'是正確的。這意味着SocialPost型號存在於名爲Social的插件中。

+0

社交是插件,SocialPost是它的模型。 我無法在SocialPost中使用belongsTo作爲文件。因爲每個帖子都有一個文件,而在File模型中,我擁有屬於SocialPost的所有文件屬於許多SocialPost。 – realman