You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel发票系统ErrorException:尝试获取非对象的'invoice_prefix'属性

异常原因分析
  • 视图依赖的$setting变量未被控制器传递到视图,导致变量为null,无法通过对象属性语法访问invoice_prefix
  • 控制器虽然传递了$setting,但数据库查询未找到对应记录,返回null而非Eloquent模型对象
  • 控制器传递的$setting是数组类型,却错误使用了对象属性访问符->
解决方法

1. 确保控制器传递有效$setting变量

在对应控制器的方法中,查询系统设置并传递到视图,示例代码:

// 根据你的实际模型命名空间调整
$setting = \App\Models\Setting::first();
return view('path-to-your-invoice-blade', compact('setting'));

如果希望查询不到设置时直接抛出404错误,可使用firstOrFail():

$setting = \App\Models\Setting::firstOrFail();

2. 视图中增加变量安全判断

在视图中对$setting做存在性和类型判断,避免直接访问属性:
修改前缀显示部分:

<span class="input-group-addon">#{{ $setting?->invoice_prefix ?? 'INV' }}</span>

修改发票初始值部分:

value="{{ isset($invoice) ? $invoice->id : ($setting?->invoice_initial_value ?? '') }}"

注:$setting?->是Laravel支持的可选对象访问语法,会自动判断$setting是否为null,避免报错;??用于设置默认值,可根据业务需求调整。

3. 检查数据类型匹配

如果控制器中传递的$setting是数组,需改为数组访问语法$setting['invoice_prefix'],或者将数组转换为对象(更推荐直接使用Eloquent模型)。

内容的提问来源于stack exchange,提问作者tsu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:15:23