2012-04-19 4 views
0

私のアプリでは、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_rowtopic_idpost_id

および方法は、これまでのところ、このようなものです:Fへ

function cleanPostTopics ($postId) { 

$post = $this->find('first', 'condition'=>array('Post.id'=>$postId)); 

} 

私は、使用する方法この$postすべてのレコードをTopicPostテーブルに登録してから削除します。この方法はモデルの中にあり、私の結びつきに基づいて他の人と話すことができる必要があることを忘れないでください。

トピックを挿入/添付するには、重複が起こらないようにしなければならない組み込みのCakePHPロジックが破損した場合、次の方法を使用してトピックを挿入することに注意してください。 http://pastebin.com/d2Kt8D2R

答えて

0

これは自動的に処理されます。投稿またはトピックを削除すると、HABTM関連のすべてのデータが削除されます。

hasOneとhasManyの関係の場合、レコードが削除されるときに関連付けられたデータが削除されるように、関係に'dependent' => trueを定義することができます。

// When a Post is deleted, the associated Answer records will be as well 
public $hasMany = array(
    'Answer' => array(
    'dependent' => true 
) 
); 

それをここで詳細情報を読むことができます:あなたの設定に基づいて

、あなたがそうのような関連HABTMデータを削除することができます。

function cleanPostTopics ($postId) { 

    $post = $this->find('first', 'condition'=>array('Post.id'=>$postId)); 
    // find all HABTM with that post id 
    $topicsPost = $this->TopicPost->deleteAll(array(
     'TopicsPost.post_id' => $postId 
), false); 

} 
+0

うん、しかし、私は**ではない**投稿やトピックを削除!このメソッドは、関係を整理するために投稿を保存する前に実行されます。 (私は、OPで概説したようにこれを行う理由がある) – Cameron

+0

ああ、私は質問でそれを見ていない。新しいHABTMデータを追加すると、オリジナルが完全にクリアされて重複を防ぐことができます。 – jeremyharris

+0

私にとっては、それは明らかにされていません。それはレコードを複製し、これを防ぐために一意のレコードを強制するために一意の外部キーを作成しましたが、これはCakePHPが引き続きテーブルに挿入しようとしているのでエラーになります。 – Cameron

関連する問題