删除的 Laravel (5.8) 观察器不起作用

Laravel (5.8) observer deleted is not working

提问人:Jiwon 提问时间:10/11/2023 更新时间:10/11/2023 访问量:27

问:

我正在使用 Laravel (5.8),我需要从表 A 中删除一条记录,然后从表 B 中删除一条记录。 所以我尝试了观察者,但它从未触发观察者的方法。deleted

我已经使用过其他方法,例如 或 ,所以我不知道为什么该方法没有触发。
我不使用软删除,因为我没有创建此数据库架构,并且我没有修改它的权限。但根据我从文件中读到的内容,这并不重要.右?
updatingupdateddeleted

这是我的代码。

  • 支付控制器.php
public function delete(Request $request, $idx){
    $payData = PaymentData::where('idx', $idx)->delete();
    return response()->json(['status' => true]);
}
  • 支付观察员.php
public function deleted(PaymentData $paymentData)
{
        if ($paymentData->pay_type == "PA") {
            $app = AppData::where('oid', $paymentData->oid)->first();

            if (!empty($app)) {
                $app->delete();
            }
        }
}
  • AppServiceProvider.php
public function boot()
{
    \App\Models\PaymentData::observe(\App\Observers\PayObserver::class);
}

我还尝试将观察语句添加到引导方法中,但它也不起作用。
我阅读了官方文件,但找不到任何线索。我错过了什么?
EventServiceProvider.php

PHP Laravel-5 观察者

评论


答:

1赞 Jiwon 10/11/2023 #1

找到了。

而不是这样做,

$payData = PaymentData::where('idx', $idx)->delete();

我应该这样做。

$payData = PaymentData::where('idx', $idx)->first();
$payData->delete();

我以为我已经试过了...... 无论如何,就是这样。希望官方文件有更多细节。:)

评论

0赞 chiliNUT 10/11/2023
看起来观察者仅在对模型进行操作时触发,而不是在构建器上操作时触发
0赞 Mohammad Salehi 10/11/2023
@chiliNUT是的,我在 laravel 8 上遇到了这个问题,关于版本 9 和 10 的 idk。
0赞 Jiwon 10/12/2023
官方页面有像第一个一样的示例代码,如“通过查询删除模型”,然后他们说“通过 Eloquent 执行批量删除语句时,删除和删除的模型事件不会被触发。所以我认为我的做法是正确的,但事实并非如此。