2

投稿に関連するログを含むテーブルがあり、投稿を削除するときにそのデータを削除したくありません。

一方、投稿のすべてのコメントとその他のデータを削除したいと考えています。

私はドキュメントを見てきましたが、彼らはそれについて何も言っていません: http://book.cakephp.org/2.0/en/models/deleting-data.html

ありがとう。

4

3 に答える 3

2

これは、少なくとも 2 つの異なる方法で行うことができます。

$this->Post->delete($id, $cascade) On は、2 番目のパラメーターを呼び出すときに、削除操作で関連付けられたレコードも削除する必要があるかどうかを示すブール値です ( Post レコードに依存するものなど)。

$this->Post->delete($id, false);

関連するレコードは削除されません。これは$this->Model->deleteAll();にも当てはまります。これは、グローバルではなく設定したい場合です。

依存は非常に重要です。この概念はhasManyorhasOneリレーションの構成にも設定できるため、これがデフォルトの削除動作になります。

public $hasMany = array(
    'Log' => array(
        'className' => 'Log',
        'foreignKey' => 'post_id',
        'dependent' => false
    )
);

この例では、関連する Post レコードが削除されても、Log レコードは削除されません。

于 2012-09-27T06:59:21.733 に答える
0

使用して$this->Post->unbindModel('hasMany' => 'Log')(または$this->unbindModel('hasMany' => 'Log'Postモデル内で)削除を呼び出す前に、関連付けを削除してみてください。

于 2012-09-26T14:20:03.400 に答える
0

バックエンドが MySQL の場合は、外部キー チェックを無効にし (SET FOREIGN_KEY_CHECKS=0;)、親の投稿とそのコメントを削除して、外部キー チェックを再び有効にすることができます (SET FOREIGN_KEY_CHECKS=1;)。ただし、これはお勧めしません。

投稿に「ソフト削除」を実装し(「削除済み」フィールドを指定し、削除されたときにtrueに設定するインデックスを追加します)、フロントエンドクエリを更新して、削除済み=の投稿を無視する傾向があります1

ソフト削除の動作はいくつかありますが、コードは非常に簡単に実装できます。

于 2012-09-27T09:22:38.257 に答える