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

Laravel查询时转status为葡萄牙语及GET请求列值变更问题

问题解决方案

一、在数据库查询阶段直接转换status字段为葡萄牙语

完全可以在查询阶段通过SQL的CASE语句实现转换,不用等到获取数据后再处理。在Laravel中借助DB::raw()嵌入原生SQL逻辑即可:

对应翻译映射:

  • 'approve' → 'aprovado'
  • 'waiting' → 'aguardando'

修改后的完整方法代码:

use Illuminate\Support\Facades\DB;

public function pdvs()
{
    $forms = Form::query()
        ->where('forms.distributor_id', '!=', 1)
        ->join('vouchers', 'forms.id', '=', 'vouchers.form_id')
        ->select(
            'forms.cnpj',
            DB::raw("CASE forms.status 
                WHEN 'approve' THEN 'aprovado' 
                WHEN 'waiting' THEN 'aguardando' 
                ELSE forms.status 
            END AS status"),
            'vouchers.code',
            'vouchers.quantityLiterPurchased'
        )
        ->get();

    return response()->json($forms);
}

注:去掉了多余的json_decode($forms),get()返回的集合可被Laravel直接序列化为JSON,无需额外解码。

二、GET操作时列值变更问题排查

列值莫名变更通常有以下几个常见原因,按优先级排查:

  • 模型访问器干扰:检查Form模型是否定义了getStatusAttribute或其他字段的访问器,这类方法会自动修改字段返回值
  • 序列化阶段修改:在get()后直接打印$forms->toArray(),查看原始查询结果是否已变更,排除response()->json()过程中的修改
  • 数据库触发器:检查forms或vouchers表是否存在自动修改字段的触发器
  • 字段名冲突:确认关联的两张表是否有同名字段(比如vouchers也有status),若有需明确指定表名(原代码已指定forms.status,此点大概率无问题)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:12:48