0

私のアプリには、投稿とトピックのシステムがあり、Topic_Postという結合テーブルを使用してトピックを投稿に添付しています。ユーザーが投稿のトピックを編集または削除するときに効率的でクリーンであることを確認するには、新しい関係を再追加または追加する前に、すべての関係を削除します。注:実際に削除するのではなく、投稿にアタッチまたはデタッチすることを意味します。トピック

これを行うための最良の方法は何ですか?投稿IDをメソッドに渡してから、トピック投稿テーブルで一致する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テーブルでは、重複を防ぐために2つの外部キーを一意にしました。

idint(11)unsigned NOT NULL auto_increment、 topic_idint(11)NOT NULL、 post_idint(11)NOT NULL、PRIMARY KEY(id)、UNIQUE KEY unique_rowtopic_idpost_id

そして、この方法はこれまでのところ次のようになっています。

function cleanPostTopics ($postId) {

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

}

$post次に、これを使用してTopicPostテーブル内のすべてのレコードを検索し、それらを削除するにはどうすればよいでしょうか。このメソッドはモデルの1つに含まれており、私の関連付けに基づいて他のモデルと通信できる必要があることを忘れないでください。

重複の発生を防ぐはずの組み込みのCakePHPロジックのいずれかが壊れた場合は、次の方法を使用してトピックを挿入/添付することに注意してください。http://pastebin.com/d2Kt8D2R

4

1 に答える 1

1

Cakeはこれを自動的に処理します。投稿またはトピックを削除すると、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);

}
于 2012-04-19T15:45:58.687 に答える