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

Laravel框架map函数内为id属性赋值返回0问题求解

问题原因说明

核心原因

这个问题是Laravel Eloquent模型的默认主键配置导致的,并非对小写id属性有特殊限制:

  • Laravel所有Eloquent模型默认约定主键字段为小写id,默认的主键类型$keyType为int,且默认开启自增$incrementing = true。
  • 当你给模型的id属性赋值字符串时,Eloquent会自动将值强制转换为配置的主键类型(即整型),非数字开头的字符串转为整型后结果就是0,和你输出的结果完全吻合。
  • 改为大写ID后,Eloquent不会将其识别为默认主键,不会触发强制类型转换,所以赋值的字符串可以正常保留。

解决方案

如果需要使用小写id作为自定义属性,可根据场景选择以下方案:

方案1:调整Loan模型的主键配置(适合该模型本身主键不符合默认约定的场景)

在App\Models\Loan类中添加以下配置:

// 如果你的表主键不是id,修改为实际主键字段
protected $primaryKey = '你的实际主键字段名';

// 如果主键是字符串类型,添加以下配置
public $keyType = 'string';
public $incrementing = false;

方案2:操作集合时转为普通数组/对象(适合临时自定义字段、不想修改模型全局配置的场景)

查询后先转为数组再操作,避免Eloquent的类型转换影响:

$drillDownChart = Loan::select('loan_type AS name')
                       ->groupBy('loan_type')
                       ->where('transaction_year', $transyear)
                       ->where('invalid', false)
                       ->get()
                       ->toArray(); // 转为普通数组

$drillDownChart = collect($drillDownChart)->map(function($val) use ($loanChartArr) {
    $val['id'] = $val['name'];
    $val['data'] = $loanChartArr;
    return $val;
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:45:01