在我的应用程序中,我有一个帖子和主题系统,并使用名为 Topic_Post 的连接表将主题附加到帖子。为了确保当用户编辑或删除帖子的主题时高效且干净,我想在重新添加或添加新关系之前删除所有关系。注意:我的意思是从帖子中附加或分离它们,而不是实际删除话题
这样做的最佳方法是什么?我需要将 post id 传递给该方法,然后在 Topic Post 表中查找具有匹配 post_id 的所有记录,然后从表中删除这些记录。
这些是关联:
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'
);
}
在 Topiic_Post 表中,我将两个外键设为唯一以防止重复。
id
int(11) unsigned NOT NULL auto_increment,
topic_id
int(11) NOT NULL,
post_id
int(11) NOT NULL, PRIMARY KEY ( id
), UNIQUE KEY unique_row
( topic_id
, post_id
)
到目前为止,方法是这样的:
function cleanPostTopics ($postId) {
$post = $this->find('first', 'condition'=>array('Post.id'=>$postId));
}
然后我将如何使用它$post
来查找 TopicPost 表中的所有记录,然后删除它们!请记住承认此方法在其中一个模型中,并且需要能够根据我的关联与其他模型进行对话。
值得注意的是,我使用以下方法插入/附加主题,如果这破坏了显然应该防止重复发生的任何内置 CakePHP 逻辑?http://pastebin.com/d2Kt8D2R