概要
親テーブルを消した際に、子テーブル・孫テーブルもまとめて削除する。
前提条件
以下の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:データの削除
コメント