2012-04-08 9 views
1

で結合テーブルのために含まれています設定すると、私は次のテーブルを持っている私のアプリケーションではCakePHP

Posts 
id 
title 
content 
    Users 
id 
username 
password 
    Profiles 
id 
user_id 
firstname 
lastname 
    Comments 
id 
post_id 
user_id 
content 
    Topics 
id 
title 
    Topic_Posts 
id 
topic_id 
post_id 

がうまくいけば、関係はかなり明白です!私が抱えている問題は、最後のテーブルが投稿とトピックの多対多の関係のための結合テーブルであることです。私はこれを設定する方法が完全にはわからない!私の知る限りの関係が正しい伝えることができるよう

class Post extends AppModel 
{ 
    public $name = 'Post'; 

    public $belongsTo = 'User'; 

    public $hasMany = array('Comment', 'TopicPost'); 

    public $actsAs = array('Containable'); 
} 
class Topic extends AppModel 
{ 
    public $hasMany = array(
     'TopicPost' 
    ); 
} 
class TopicPost extends AppModel { 
    public $belongsTo = array(
     'Topic', 'Post' 
    ); 
} 

はここで投稿、トピックとTopics_Postsのための私のモデルですか?そして、私の方法で、私は次のステートメントを持っている:

$post = $this->Post->find('first', 
      array('contain'=> 
      array(
       'Comment'=>array('User'=>array('Profile')), 
       'User'=>array('Comment','Profile') 
      ), 
      'conditions'=>array('Post.id'=>$id))); 

だから、基本的に私の質問は、私はPostモデルにコメントしてユーザーを追加する必要がありましたので、いないことを確認していないとして含まれているにトピックを追加する方法でありますなぜ、次に何をするか...

トピックをもう一度引き出すにはどうすればいいですか?これがどのように働くのか混乱しているので、私は実際のトピックではなく結合テーブルにリンクしています...私はちょうどオフトラックでない限り。これについての助けに感謝します。

答えて

2

あなたがこれを行うことができます、現在の設定で:

'contain' => array(
    'TopicPost' => array('Topic') 
) 

をそれとも、Postモデルに

public $hasAndBelongsToMany = array(
    'Topic' => array('with' => 'TopicPost') 
); 

を追加することができます。

そして、あなたは次のようになります含まれています

'contain' => array(
    'Topic' 
) 
+0

素晴らしい作品素晴らしいです。 – Cameron

関連する問題