【发布时间】:2015-02-09 22:10:29
【问题描述】:
例如我有三个模型:
Invoice:有很多卡
Card:有很多serviceLogs
ServiceLog
class Invoice extends Eloquent {
protected $table = "invoice";
protected $guarded = ["id"];
protected $deleted_at = ['deleted_at'];
use SoftDeletingTrait;
public static function boot() {
parent::boot();
Invoice::deleted(function($invoice) {
if ($invoice->cards()) {
if ($invoice->forceDeleting) {
$invoice->cards()->forceDelete();
} else {
$invoice->cards()->delete();
}
}
});
}
public function cards() {
return $this->hasMany("Card");
}
}
class Card extends Eloquent {
protected $table = "card";
protected $guarded = ["id"];
protected $deleted_at = ['deleted_at'];
use SoftDeletingTrait;
public static function boot() {
parent::boot();
Card::deleted(function($card) {
if ($card->serviceLogs()) {
if ($card->forceDeleting) {
$card->serviceLogs()->forceDelete();
} else {
$card->serviceLogs()->delete();
}
}
});
}
public function serviceLogs() {
return $this->hasMany("ServiceLog");
}
}
class ServiceLog extends Eloquent {
protected $table = "service_log";
protected $guarded = ["id"];
protected $deleted_at = ['deleted_at'];
use SoftDeletingTrait;
}
当 $invoice 被删除时,Invoice 模型的 boot() 函数会自动删除与之关联的所有卡片。
但是在 $card 从上面的函数中删除后,卡片模型的 boot() 函数没有触发。
这样与每个 $card 关联的所有 $serviceLogs 也不会被删除。
我的问题是如何在 Laravel 中删除递归?
【问题讨论】: