投稿とトピックを保存し、Topic_Posts テーブルを使用してそれらを結合するアプリケーションがあります。
アプリケーションの関連付けは次のとおりです。
Post.php
class Post extends AppModel
{
public $name = 'Post';
public $belongsTo = 'User';
public $hasMany = array('Answer');
// Has many topics that belong to topic post join table... jazz
public $hasAndBelongsToMany = array(
'Topic' => array('with' => 'TopicPost')
);
}
Topic.php
class Topic extends AppModel
{
public $hasMany = array(
'TopicPost'
);
}
TopicPost.php
class TopicPost extends AppModel {
public $belongsTo = array(
'Topic', 'Post'
);
}
ユーザーがトピックを表示すると、たとえば/topics/view/topicname
、そのトピックを含むすべての投稿を表示したいとします。
これまでのところ、ビューの TopicsController に次のメソッドがあります。
public function view ( $slug )
{
$topic = $this->Topic->find('first', array('conditions'=>array('Topic.slug'=>$slug)));
$this->set('topic', $topic);
$this->set('title_for_layout', $topic['Topic']['title'] . ' – Topics');
$this->paginate = array
(
'Post' => array
(
'limit'=>15,
'conditions'=>array
(
'Post.status'=>array(1,2),
'TopicPost.topic_id' => $topic['Topic']['id'],
),
'order'=>array('Post.datetime'=>'desc'),
'contain'=>array('User'=>'Profile', 'TopicPost')
)
);
$posts = $this->paginate('Post'); // this one
$this->set('posts', $posts);
}
Posts と TopicPosts を使用できるようpublic $uses = array('Topic','TopicPost','Post');
に、コントローラーの上部に以下を追加し、すべてのモデルを包含可能として機能させました。
したがって、基本的には、データベース モデル TopicPosts で、表示しているトピックの ID と一致する投稿を見つける必要があります。