Laravel中totalsales字段有值却显示为0的问题排查
问题分析与解决
问题核心是Laravel模型的属性/访问器覆盖了查询返回的自定义字段值。虽然你的SQL查询通过SUM(selling_price) as totalsales得到了正确值,但Sales模型可能存在同名的属性或访问器,导致调用$sale->totalsales时返回的是模型处理后的值(比如默认0),而非查询的原始结果。
排查方向与解决方案
1. 检查Sales模型是否存在同名属性或访问器
打开app/Models/Sales.php,查看以下内容:
- 是否在
$fillable、$guarded或$attributes数组中定义了totalsales字段?如果数据库表本身没有这个字段,移除它。 - 是否存在
getTotalsalesAttribute访问器?比如类似下面的代码:
public function getTotalsalesAttribute($value) { return 0; // 或其他错误逻辑导致返回0 }
如果有这类访问器,要么修改逻辑返回原始值,要么直接删除该访问器。
2. 修改查询字段别名,避免冲突
如果不想改动模型,可以给查询的聚合字段换个别名,比如改成total_sales:
$this->query = Sales::with(['item', 'branch'])->isSales()->groupBy('item_id') ->select(DB::raw('count(*) as total, SUM(costs) as costs,SUM(profit) as profits, SUM(selling_price) as total_sales,item_id'))->orderBy('total','DESC');
然后在Blade模板中对应修改:
<td> {{ number_format($sale->total_sales, 3) }} </td>
3. 直接获取查询原始值
如果不想改动查询和模型,可以使用模型的getOriginal()方法绕过属性处理,直接获取数据库查询返回的原始值:
<td> {{ number_format($sale->getOriginal('totalsales'), 3) }} </td>
内容的提问来源于stack exchange,提问作者redamakarem
相关产品推荐
相关产品推荐

