私のアプリでは、PostsとTopicsのシステムがあり、Topic_Postという結合テーブルを使ってトピックを投稿に結び付けています。投稿の編集や削除が効率的できれいであることを確認するには、再追加するか、新しい投稿を追加する前にすべての関係を削除する必要があります。注:私は投稿から削除するか、トピックを削除するCakePHPメソッドを使用して結合テーブル内のすべての関係を削除する
これを行う最善の方法は何ですか?投稿IDをメソッドに渡してから、一致するpost_idを持つトピック・ポスト・テーブルのすべてのレコードを見つけて、それらのレコードをテーブルから削除する必要があります。
これらは団体です:Topiic_Postテーブルで
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'
);
}
私は重複を防ぐために2つの外部キーがユニーク行きました。
id
INT(11)の符号なしNULL NOT 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
)
および方法は、これまでのところ、このようなものです:Fへ
function cleanPostTopics ($postId) {
$post = $this->find('first', 'condition'=>array('Post.id'=>$postId));
}
私は、使用する方法この$post
すべてのレコードをTopicPostテーブルに登録してから削除します。この方法はモデルの中にあり、私の結びつきに基づいて他の人と話すことができる必要があることを忘れないでください。
トピックを挿入/添付するには、重複が起こらないようにしなければならない組み込みのCakePHPロジックが破損した場合、次の方法を使用してトピックを挿入することに注意してください。 http://pastebin.com/d2Kt8D2R
うん、しかし、私は**ではない**投稿やトピックを削除!このメソッドは、関係を整理するために投稿を保存する前に実行されます。 (私は、OPで概説したようにこれを行う理由がある) – Cameron
ああ、私は質問でそれを見ていない。新しいHABTMデータを追加すると、オリジナルが完全にクリアされて重複を防ぐことができます。 – jeremyharris
私にとっては、それは明らかにされていません。それはレコードを複製し、これを防ぐために一意のレコードを強制するために一意の外部キーを作成しましたが、これはCakePHPが引き続きテーブルに挿入しようとしているのでエラーになります。 – Cameron