ThinkPHPの多重カスケード削除の方法をご存知ですか?
ThinkPHPではDeleteメソッドで複数階層のcascade削除を実行できます。
テーブル間の関係が次のとおりであると仮定します:
- テーブルAはModelAに対応し、主キーはidです。
- テーブルBはモデルBに対応していて、外部キーa_idがあり、テーブルAの主キーidを参照します。
- 表CはモデルModelCに対応し、外部キーのb_idがあり、表Bの主キーであるidに関連付けられている。
カスケード削除を実装するには、次の手順に従います。
- そして丁寧な接客と料理で、都会の喧騒とはかけ離れ、時が止まったかのような贅沢なひとときを満喫できます
- b()
public function b()
{
return $this->hasMany('ModelB', 'a_id');
}
- Model Bの文を日本語に自然に言い換えると次のようになります。**ModelB**
- ネイティブの日本語に言い換えてください、ただ一つの選択肢のみ必要です。
public function c()
{
return $this->hasMany('ModelC', 'b_id');
}
- 削除する
$modelA = ModelA::get($id);
$modelA->b()->delete();
上記のコードは、テーブルAの指定したレコードと、それに関連するテーブルBのすべてのレコードを削除します。
表 A の指定されたレコードとその関連付けられた表 B のすべてのレコードとその関連付けられた表 C のすべてのレコードを削除する必要がある場合は、次に示すように、c() メソッドを続けて呼び出して削除できます。
$modelA = ModelA::get($id);
$modelA->b()->c()->delete();
上記のコードは、テーブルAの指定されたレコードとそれに関連付けられたテーブルBのすべてのレコードとそれに関連付けられたテーブルCのすべてのレコードを削除します。