ノラプログラマーの技術メモ

ネットで調べても出てこなかった情報を載せていきたい技術系ブログ。

cakephpで関連するテーブルを連鎖的にデータ削除する方法

概要

cakephp2系でデータベースからデータを削除するにはdelete関数を呼び出す。

もしテーブル間でアソシエーションが設定されていて、自分自身を参照するレコードがある場合はそのレコードも連鎖的に削除することができる。その設定方法です。

環境

php ver5.3.3
cakephp ver2.4.6

手順

modelの設定を編集する。例えば「app/Model/Urikake.php」など。
[dependent]はデフォルトでfalseなので、これをtrueにする。

public $hasMany = array(
    'Urikake' => array(
        'className' => 'Urikake',
        'foreignKey' => 'customer_id',
        'dependent' => true,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => '',
        'counterQuery' => ''
    )
);

この設定がない場合はcake bakeコマンドまたは手動でテーブル間のリレーションを設定しておく。