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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:57:38