只修改了商品评分,没有修改商品评论数

问题1:只修改了商品评分,没有修改商品评论数

问题2:执行队列处理器之后执行成功过一次,成功之后这个监听器一直自动触发。与问题 https://learnku.com/laravel/t/22110 相同。

只修改了商品评分,没有修改商品评论数

仔细对照过代码,完全一样的。
这是监听器的代码
只修改了商品评分,没有修改商品评论数

错误日志:

[2019-04-26 10:44:23] local.ERROR: Call to a member function items() on null {"exception":"[object] (Symfony\Component\Debug\Exception\FatalThrowableError(code: 0): Call to a member function items() on null at /home/vagrant/code/Laravel/app/Listeners/UpdateProductRating.php:16)\
[stacktrace]\

0 [internal function]: App\Listeners\UpdateProductRating->handle(Object(App\Events\OrderReviewed))\

1 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Events/CallQueuedListener.php(86): call_user_func_array(Array, Array)\

2 [internal function]: Illuminate\Events\CallQueuedListener->handle(Object(Illuminate\Foundation\Application))\

3 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array(Array, Array)\

4 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()\

5 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))\

6 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php(572): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)\

7 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(94): Illuminate\Container\Container->call(Array)\

8 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}(Object(Illuminate\Events\CallQueuedListener))\

9 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Events\CallQueuedListener))\

10 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(98): Illuminate\Pipeline\Pipeline->then(Object(Closure))\

11 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(49): Illuminate\Bus\Dispatcher->dispatchNow(Object(Illuminate\Events\CallQueuedListener), false)\

12 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(83): Illuminate\Queue\CallQueuedHandler->call(Object(Illuminate\Queue\Jobs\RedisJob), Array)\

13 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(327): Illuminate\Queue\Jobs\Job->fire()\

14 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(277): Illuminate\Queue\Worker->process('redis', Object(Illuminate\Queue\Jobs\RedisJob), Object(Illuminate\Queue\WorkerOptions))\

15 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(118): Illuminate\Queue\Worker->runJob(Object(Illuminate\Queue\Jobs\RedisJob), 'redis', Object(Illuminate\Queue\WorkerOptions))\

16 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(102): Illuminate\Queue\Worker->daemon('redis', 'default', Object(Illuminate\Queue\WorkerOptions))\

17 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(86): Illuminate\Queue\Console\WorkCommand->runWorker('redis', 'default')\

18 [internal function]: Illuminate\Queue\Console\WorkCommand->handle()\

19 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array(Array, Array)\

20 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()\

21 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))\

22 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php(572): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)\

23 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Console/Command.php(183): Illuminate\Container\Container->call(Array)\

24 /home/vagrant/code/Laravel/vendor/symfony/console/Command/Command.php(255): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))\

25 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Console/Command.php(170): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))\

26 /home/vagrant/code/Laravel/vendor/symfony/console/Application.php(908): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))\

27 /home/vagrant/code/Laravel/vendor/symfony/console/Application.php(269): Symfony\Component\Console\Application->doRunCommand(Object(Illuminate\Queue\Console\WorkCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))\

28 /home/vagrant/code/Laravel/vendor/symfony/console/Application.php(145): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))\

29 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Console/Application.php(89): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))\

30 /home/vagrant/code/Laravel/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(122): Illuminate\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))\

31 /home/vagrant/code/Laravel/artisan(37): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))\

32 {main}\

"}

谢谢解答

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
leo
最佳答案

既然你已经找到了相同的问题,那么为什么不看看别人是怎么解决/怎么找到问题的呢

4年前 评论
讨论数量: 6
leo

既然你已经找到了相同的问题,那么为什么不看看别人是怎么解决/怎么找到问题的呢

4年前 评论

@leo 大部分问题解决了,但还有个小问题,执行php artisan queue:work后,监听器一直自动触发,并且没有报错,错误日志没有被写入错误信息。

然后我去给订单添加评论,评论被写入了数据库,订单的评分以及评论数也被修改了,说明功能是完成了!

那么请问大佬,像截图中这种情况,一般是什么原因导致的呢?如果让它一直跑下去,应该会降低程序性能吧?

file

4年前 评论
leo

@Neymar 说明有一个事件一直处理失败,一般是对应的 Order 被删除导致的。

正式环境一般会在执行 queue:work 的时候加上 --tries 参数,可以指定最多重试多少次。

4年前 评论

@leo 那么请问能不能找到这个处理失败的事件,然后在队列中手动剔除这个事件?我最开始代码中有一个错误,开启队列后报错,是不是就是这时的处理失败的事件卡在队列中被无限处理?

4年前 评论
leo

@Neymar 加上 --tries 参数,Laravel 重试完指定次数就会丢弃掉这个事件

4年前 评论

@leo 好的,谢谢大佬!

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!