概要
親テーブルを消した際に、子テーブル・孫テーブルもまとめて削除する。
前提条件
以下の3つのテーブルがあるとする。
・ParentsTable
・ChildrenTable
・GrandChildrenTable
以下のようなリレーションである。
・ParentsTableとChildrenTableは親子関係(hasMany・belongTo)
・ChildrenTableとGrandChildrenTableは親子関係(hasMany・belongTo)
・ParentsTableとGrandChildrenTableには直接のリレーションがない。
やりたいこと
この際に、Parentsテーブルを消したら関連するChildrenTableを削除し、さらに削除したChildrenTableと関連するGrandChildrenTableを削除する
コード
src/Model/Tableを編集する。
ParentsTable削除時に、ChildrenTableを自動削除する
src/Model/Table/ParentsTable.php
class ParentsTable extends Table
{
    public function initialize(array $config): void
    {
       ・・・省略
       $this->hasMany('Children', [
            'foreignKey' => 'child_id',
             //以下の2行を追記
            'dependent' => true,
            'cascadeCallbacks' => true,
        ]);
ChildrenTableを削除した際に、GrandChildrenTableを自動削除する
src/Model/Table/ChildrenTable.php
class ChildrenTable extends Table
{
    public function initialize(array $config): void
    {
       ・・・省略
       $this->hasMany('GrandChildren', [
            'foreignKey' => 'grand_child_id',
             //以下の2行を追記
            'dependent' => true,
            'cascadeCallbacks' => true,
        ]);
これでParentsTableを削除した際に関連するChildrenTableが削除され、さらにChildrenTableを削除した際に関連するGrandChildrenTableを削除することができる。
参考
CakePHP 4.x Strawberry Cookbook:データの削除

 
  
  
  
  
コメント