当我的模型更新时,会触发一个事件:
protected $events = [
'updated' => ZoneUpdated::class,
];
触发的事件监听器也将在模型上创建:
public function handle(ZoneUpdated $event)
{
Zone::find($event->zone->id)->update([
'updated' => true,
'valid' => 'u',
]);
}
如何禁用侦听器来触发新事件,因为此时会产生无限循环。
答案 0 :(得分:2)
如果您仍需要跟踪模型更新事件并仍然继续更新该模型,您可以尝试使用Fluent在Listener中更新模型
public function handle(ZoneUpdated $event)
{
// assuming table name for Zone Model is "zones" and primary key is "id"
\DB::table('zones')
->where('id', $event->zone->id)
->update([
'updated' => true,
'valid' => 'u',
]);
}
使用fluent应该停止无限循环,因为它不再基于模型对象执行更新,而是通过Fluent直接执行数据库。
话虽如此,我建议你重新考虑如何使用事件监听器,如果这真的是你需要的话。
答案 1 :(得分:0)
有一些方法可以确保事件仅在某些情况下触发,但我发现绕过这种情况的一种更简单的方法是使用updating
事件代替update
:
protected $events = [
'updating' => ZoneUpdated::class,
];