1

私のアプリケーションには、次のテーブルがあります。

    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

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

投稿、トピック、および Topics_Posts のモデルは次のとおりです。

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'
    );
}

私が言える限り、関係は正しいですか?そして、私の方法では、次のステートメントがあります。

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

したがって、基本的に私の質問は、コメントとユーザーを投稿モデルに追加する必要がなかったため、トピックをコンテンツに追加する方法です。その理由や次に何をすべきかわかりません...

また、どうすればトピックを再び引き出すことができますか? 実際のトピックではなく結合テーブルにリンクしていることを考えると、これがどのように機能するかについて混乱しているため...私が軌道から外れていない限り。これに関するヘルプをいただければ幸いです。

4

1 に答える 1

2

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

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

または、追加できます

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

Postモデルに。

そして、あなたの内容は次のようになります:

'contain' => array(
    'Topic'
)
于 2012-04-08T20:42:48.740 に答える