Laravel - 为模型侦听器中的计划事件编写异常
Laravel - writing exception for schedule event in model listener
我有一个模型 Product
触发 retrieved
事件 ProductRetrieved
和一个侦听器 CheckProductValidity
根据 API 路径抛出异常( if-else 条件)。
此外,我在 Console\Kernal.php
中实施了一个每天 00:00 小时运行的更新查询。
问题: CheckProductValidity
定时任务抛出异常。如何在侦听器中设置异常以允许在调度程序完成时检索模型 Product
数据。
可能的解决方案: 使用 unsetEventDispatcher
和 setEventDispatcher
但有时此更新查询可能比平时花费更多时间。此外,cron 还会发送通知和处理作业(全部取决于 Product
),因此可能会导致问题。
不是真正的解决方案,但我就是这样解决的。
// fix to catch if artisan schedule:run has intiated this check;
$parameters = app('request')->server->get('argv');
$allowed_commands = ['schedule:run', 'migrate:refresh', 'db:seed', 'queue:work'];
if ($parameters[0]==='artisan'
&& in_array($parameters[1], $allowed_commands))
return true;
在侦听器中,我添加了这段代码,它会检查请求是 artisan
命令的结果还是 route
.
的结果
我有一个模型 Product
触发 retrieved
事件 ProductRetrieved
和一个侦听器 CheckProductValidity
根据 API 路径抛出异常( if-else 条件)。
此外,我在 Console\Kernal.php
中实施了一个每天 00:00 小时运行的更新查询。
问题: CheckProductValidity
定时任务抛出异常。如何在侦听器中设置异常以允许在调度程序完成时检索模型 Product
数据。
可能的解决方案: 使用 unsetEventDispatcher
和 setEventDispatcher
但有时此更新查询可能比平时花费更多时间。此外,cron 还会发送通知和处理作业(全部取决于 Product
),因此可能会导致问题。
不是真正的解决方案,但我就是这样解决的。
// fix to catch if artisan schedule:run has intiated this check;
$parameters = app('request')->server->get('argv');
$allowed_commands = ['schedule:run', 'migrate:refresh', 'db:seed', 'queue:work'];
if ($parameters[0]==='artisan'
&& in_array($parameters[1], $allowed_commands))
return true;
在侦听器中,我添加了这段代码,它会检查请求是 artisan
命令的结果还是 route
.