Laravel调用OrderPlaced构造函数传入null参数报错如何解决
报错解决方法
问题1:查询订单返回空
你调用App\Order::find(1)时,如果数据库orders表中不存在id为1的记录,find方法会直接返回null,将null传入要求Order实例的构造方法就会触发类型错误。
解决修改web.php代码,使用findOrFail替代find,不存在对应订单时会直接抛出404错误,方便排查:
Route::get('/mailable', function(){ $order = App\Order::findOrFail(1); return new App\Mail\OrderPlaced($order); });
问题2:Order模型命名空间导入错误
从报错提示must be an instance of App\Mail\ App\Order可以看出,OrderPlaced类处于App\Mail命名空间下,你没有在文件顶部引入App\Order模型,PHP默认会在当前命名空间下查找Order类,导致类型匹配失败。
解决:打开OrderPlaced.php,在顶部命名空间声明后加入引入代码:
use App\Order;
也可以直接修改构造方法参数为完整命名空间路径:
public function __construct(\App\Order $order)
以上两处修改完成后,即可正常将订单实例传入邮件类,placed.blade.php模板不需要额外调整,就能正常渲染订单信息。
内容的提问来源于stack exchange,提问作者eee aaa
相关产品推荐
相关产品推荐

