ฉันใช้ Laravel 4.1 และกำลังพยายามลบแบบเรียงซ้อน ฉันกำลังดำเนินการนี้เนื่องจากวิธีการลบบางวิธีจะลบเนื้อหาที่เกี่ยวข้องที่จัดเก็บไว้ใน S3 ดังนั้นการใช้การลบแบบเรียงซ้อน DB จึงไม่เหมาะสม
สมมติว่าฉันมีโมเดลรายการซึ่งมีรูปภาพและตัวเลือกที่เกี่ยวข้องหลายตัวซึ่งมีรูปภาพดังที่แสดงด้านล่าง (ตัดให้สั้นลง)
class Entry extends Eloquent {
public function image()
{
return $this->morphOne('Image', 'imageable');
}
public function options()
{
return $this->hasMany('Option');
}
protected static function boot() {
parent::boot();
static::deleting(function($entry) {
$image = $entry->image;
if($image !== null) {
$image->delete();
}
$entry->options()->delete()
//Option::where('entry_id', $entry->id)->delete(); This also doesn't work
});
}
}
class Option extends Eloquent {
public function entry()
{
return $this->belongsTo('Entry');
}
public function image()
{
return $this->morphOne('Image', 'imageable');
}
protected static function boot() {
parent::boot();
static::deleting(function($option) {
Log::info('Trying to delete an option object');
$image = $option->image;
if($image !== null) {
$image->delete();
}
});
}
}
หมายเหตุ : ฉันกำลังทำการลบตามที่แนะนำในคำตอบนี้
เมื่อฉันเรียก $entry->delete() มันจะลบรูปภาพและรายการเองอย่างไรก็ตามตัวจัดการการลบจะไม่ถูกเรียกใช้ในตัวเลือก (ฉันไม่เห็นผลลัพธ์ไปยังบันทึก) อย่างไรก็ตาม หากฉันใช้สิ่งต่อไปนี้ในฟังก์ชันการลบรายการทุกอย่างทำงานได้ดี
foreach($entry->options as $option) {
$option->delete();
}
เหตุใด $entry->options()->delete() จึงไม่ทำงาน นี่เป็นข้อผิดพลาดใน Laravel หรือฉันทำผิดพลาด