Laravel 事件的坑

准确的说,对于熟读文档的人,这应该不算一个坑

 

由于事件中引入了 SerializesModels 这个 Trait ,它的作用是将所有 Model 类型的属性全部序列化,这就导致,如果我传入一个空的模型(即直接new Model()),那么序列化时必然会报错:No query results for model 。而且我直接用的队列ShouldQueue,所以一开始并没有注意到这个问题,直到我翻了failed_jobs这个表……

所以,如果要测试的话,最好是不要给事件的属性里面赋一个空模型,否则就是在自己坑自己。或者,如果你的代码很特殊,也可以不引入SerializesModels(最好是出问题的时候才去掉)。

顺带一提,事件订阅者(EventSubscriber)是可以直接 implements ShouldQueue 的,虽然文档里面没写。

发表评论