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

Laravel模型Mutators生效异常:Model查询可用DB::table查询不可用

问题原因及解决办法

这不是操作错误,是两种查询方式的本质差异导致的:

  • 模型查询(Model1::all()):返回的是Model1的实例集合,Laravel会自动触发你在模型中定义的Accessor(即fee属性的get方法),所以输出会自动将小数点替换为逗号。
  • DB门面查询(DB::table('model1')->get()):返回的是标准PHP对象(StdClass)或数组,不属于模型实例,完全不会触发模型里的任何Mutators/Accessors逻辑,因此直接返回数据库存储的原始值(带.的格式)。

解决办法

方法一:改用模型查询(推荐)

把DB门面的查询替换为模型查询,保持逻辑统一:

$model1 = Model1::where(....)->get();

这样返回的是模型实例集合,会自动触发fee的Accessor,输出格式就是你想要的1,50。

方法二:手动处理DB查询结果

如果必须使用DB门面查询,可以在获取结果后手动遍历处理字段:

$model1Data = DB::table('model1')->where(...)->get();
foreach ($model1Data as $item) {
    $item->fee = str_replace('.', ',', $item->fee) ?: 0;
}

方法三:抽离复用逻辑

如果需要在多个地方处理这个格式转换,可以在模型中抽一个静态方法:

// 在Model1模型中新增
public static function formatFee(?string $value): string|int
{
    return str_replace('.', ',', $value) ?: 0;
}

// 使用时调用
$item->fee = Model1::formatFee($item->fee);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 19:50:56