デフォルトのカスケード削除メソッドを自分のモデルの削除メソッドで上書きすることは可能かもしれませんが、多くの作業のように聞こえるので、プロジェクトの回避策を作成しました。
「zadania」テーブルと「zadania_images」テーブルがあります。2 番目のテーブルには、2 つのテーブルを関連付ける「zadnie_id」列があります。
「zadanie_images」行にはファイル名が含まれており、親の「zadanie_id」をカスケード削除した後もファイルは残っていました。ここに私の解決策があります:
「ザダニエ」モデルでは:
public function deleteZadanie($id) {
$row = $this->find($id)->current();
if($row) {
$image = new Model_ZadanieImage();
$image->deleteRelatedFiles($id);
$row->delete();
}
}
「ZadanieImage」モデルでは:
public function deleteImage($id) {
$row = $this->find($id)->current();
if($row) {
//delete the record
$filename = $row['name'];
$row->delete();
//and delete related files
unlink('images/zadanie/' . $filename);
unlink('images/zadanie/thumbs/' . $filename);
}
}
public function deleteRelatedFiles($zadanie_id) {
$select = $this->select()->where('zadanie=?', $zadanie_id);
$images = $this->fetchAll($select);
foreach($images as $image) {
$this->deleteImage($image->id);
}
}