gpt4 book ai didi

php - Laravel软删除父记录时如何软删除相关记录?

转载 作者:IT王子 更新时间:2023-10-29 00:00:34 24 4
gpt4 key购买 nike

我有这张发票表,其结构如下

id | name | amount | deleted_at
2 iMac 1500 | NULL

和具有以下结构的付款表

id | invoice_id | amount | deleted_at
2 2 1000 | NULL

发票模型

class Invoice extends Model {

use SoftDeletes;

}

这是删除发票的代码

public function cance(Request $request,$id)
{
$record = Invoice::findOrFail($id);
$record->delete();
return response()->json([
'success' => 'OK',
]);
}

支付模式

class Payment extends Model {

use SoftDeletes;

}

Invoice 表上的 softDelete 工作正常,但其相关记录(付款)仍然存在。如何使用 softDelete 删除它们?

最佳答案

Eloquent 不提供相关对象的自动删除,因此您需要自己编写一些代码。幸运的是,这非常简单。

Eloquent 模型 在模型生命周期的不同阶段触发不同的事件,例如创建、创建、删除、删除等 - 您可以在这里阅读更多相关信息:http://laravel.com/docs/5.1/eloquent#events .您需要的是一个监听器,它会在 deleted 事件被触发时运行 - 然后这个监听器应该删除所有相关对象。

您可以在模型的 boot() 方法中注册模型监听器。监听器应遍历要删除的发票的所有付款,并应将其一一删除。批量删除在这里不起作用,因为它会绕过模型事件直接执行 SQL 查询。

这样就可以了:

class MyModel extends Model {
protected static function boot() {
parent::boot();

static::deleted(function ($invoice) {
$invoice->payments()->delete();
});
}
}

关于php - Laravel软删除父记录时如何软删除相关记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32163509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com