関連するテーブルのデータをまとめて削除する。【CakePHP4】

概要

親テーブルを消した際に、子テーブル・孫テーブルもまとめて削除する。

前提条件

以下の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データの削除

コメント

タイトルとURLをコピーしました