也许可以用我自己模型的删除方法覆盖默认的级联删除方法,但听起来工作量很大,所以我为我的项目做了一个解决方法。
我有“zadania”表和“zadania_images”表。第二个表有“zadanie_id”列,它与这两个表相关。
“zadanie_images”行包含文件名,在级联删除父“zadanie_id”后,文件仍然存在。这是我的解决方案:
在“Zadanie”模型中:
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);
}
}