如何解决通过 Laravel 观察者捕获更新事件
我试图在创建和更新我的模型之后触发一些操作,遵循 Laravel 文档关于事件和观察者。所以我有:
\App\Observers\PedidoObserver.php:
<?php
namespace App\Observers;
use App\Pedido;
use Illuminate\Support\Facades\Log;
class PedidoObserver {
public $afterCommit = true;
public function created(Pedido $pedido)
{
Log::info('A new order has been created and the properly method has been triggered');
}
public function updated(Pedido $pedido)
{
Log::info('An order has been updated and the properly method has been triggered');
}
}
\App\Providers\EventServiceProvider.php 中的启动函数:
public function boot(){
parent::boot();
Pedido::observe(PedidoObserver::class);
}
当使用以下代码从我的一个控制器创建新订单时,Created 方法成功:
//...
Pedido::create($pedido['header'])->save();
然而,即使我的订单从另一个控制器方法成功更新,更新的事件也永远不会被执行:
//...
Pedido::where([['numserie',$numserie],['estado','SC']])->update(['estado'=> 'P','estadonombre' => 'Pendiente de pago'])
解决方法
这是因为模型事件没有在 batch update models 中触发。
您必须更新 EXACTLY 模型,而不是使用 where 查询。
您需要更改使用观察者的逻辑,如下所示:
Pedido::where([['numserie',$numserie],['estado','SC']])->firstOrFail()->update(['estado'=> 'P','estadonombre' => 'Pendiente de pago'])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。