如何解决拉拉维尔如果数据库正在播种,则禁用观察者方法
我的用户模型有一个观察者。在我的观察者->创建的事件中,我有一些代码。
public function created(User $user)
{
sendEmail();
}
所以,这个想法是,当一个用户被创建时,系统会向用户发送电子邮件通知,告知该账户已创建。
问题:当数据库播种时,它还调用此方法“已创建”并向用户(在种子中)发送电子邮件通知。 所以,我的问题是,如果目前 laravel 正在播种数据,我该如何检查,可能在这个“创建”方法中 -> 不发送电子邮件,不要运行“创建”观察者方法。
尝试谷歌搜索,找到了一些东西,但工作不正常。
类似于 YourModel::flushEventListeners();
解决方法
您可以使用 YourModel::unsetEventDispatcher();
删除模型临时的事件侦听器。
如果您在同一个执行中播种后需要它们,您可以读取调度程序,取消设置它们,然后重新设置它们。
$dispatcher = YourModel::getEventDispatcher()
// Remove Dispatcher
YourModel::unsetEventDispatcher();
// do stuff here
// Re-add Dispatcher
YourModel::setEventDispatcher($dispatcher);
,
您可以使用 saveQuietly() 函数 https://laravel.com/docs/8.x/eloquent#saving-a-single-model-without-events 这允许您禁用单个模型的所有事件。
如果您想为单个模型禁用单个事件,请在此处阅读:http://derekmd.com/2019/02/conditionally-suppressing-laravel-event-listeners/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。