设置包含CakePHP中的连接表

时间:2012-04-08 20:20:40

标签: php 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

希望这种关系非常明显!我遇到的问题是,最后一个表是帖子和主题之间多对多关系的连接表。我不完全确定如何设置它!

以下是我的帖子,主题和主题的模型_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)));

所以基本上我的问题是如何将主题添加到包含,因为我没有必要将评论和用户添加到Post模型,所以不确定为什么或下一步做什么......

另外我如何将主题再次拉出来?我很困惑这是如何工作的,因为我正在连接到连接表而不是ACTUAL主题...除非我我只是偏离轨道。对此的帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

使用当前设置,您可以执行以下操作:

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

或者你可以添加

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

Post模型。

然后你的包含将如下所示:

'contain' => array(
    'Topic'
)