Laravel 自定义 Eloquent 主键字段方法
作者:自在如风听雨
时间:2026-04-15
浏览:0
当数据库表的主键不是默认的id(如des_id),需在对应Eloquent模型中显式声明$primaryKey属性,否则查询会因找不到id字段而报错。

当数据库表的主键不是默认的 id(如 des_id),需在对应 Eloquent 模型中显式声明 $primaryKey 属性,否则查询会因找不到 id 字段而报错。
当数据库表的主键不是默认的 `id`(如 `des_id`),需在对应 Eloquent 模型中显式声明 `$primaryKey` 属性,否则查询会因找不到 `id` 字段而报错。
在 Laravel 中,Eloquent 默认假设每张数据表的主键字段名为 id,且为自增整型。若实际表结构使用了其他字段(例如 des_id)作为主键,而模型未作适配,执行类似 Destination::where('des_id', $value)->firstOrFail() 这样的查询时,Laravel 内部仍可能在关联、约束或隐式条件中尝试引用 id 字段,从而触发 SQLSTATE[42S22]: Column not found: 1054 Unknown column 'tbl_destinations.id' 错误。
解决方法非常简洁:在 Destination 模型类中明确指定主键字段名:
✅ 注意事项:
- protected $primaryKey 必须与数据库中真实主键字段名完全一致(包括大小写和下划线);
- 若 des_id 不是自增整数(例如是 UUID 或手动维护的字符串),务必同时设置 public $incrementing = false,否则 save() 或 create() 可能行为异常;
- 如主键类型非整型(如 VARCHAR),建议补充 protected $keyType = 'string',以避免类型隐式转换问题;
- 路由验证规则 'exists:mysql.tbl_destinations,des_id' 已正确指向 des_id,无需修改,它本身不依赖模型的 $primaryKey 设置;
- 所有基于模型的查询(如 find(), findOrFail(), 关联关系等)都将自动使用该自定义主键。
完成配置后,原路由逻辑即可正常运行:
$destination_id = Destination::where('des_id', $request->destination_id)->firstOrFail();
// ✅ 现在 Eloquent 完全识别 des_id 为主键,不再尝试访问 id 字段这是 Laravel 适配非标准数据库设计的标准实践,既轻量又可靠。
作者最新文章
Nothing 海外重启社区共创计划:提前体验与评测规则详解
2026-09-08 17:06
PDF合并工具怎么选?多个PDF文件免费合并方法有哪些?
2026-09-02 09:06
360 手机N4(全网通)忘了手机密码怎么办?
2026-08-25 13:56
小米米家便携咖啡机开启众筹:45 秒冷热快速萃取、IP55 认证,559 元
2026-08-25 11:44
海信A10回归:可能是今年唯一的小屏手机,但你真能用惯墨水屏吗?
2026-08-25 09:36
上一篇:
TXT小说阅读器广告多怎么处理
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多


































