Laravel 自定义 Eloquent 主键字段方法
当数据库表的主键不是默认的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 适配非标准数据库设计的标准实践,既轻量又可靠。
Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。
Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。
Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。
Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等
Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。
Android Studio 是 Google 面向 Android 应用开发提供的官方集成开发环境,以 IntelliJ IDEA 为基础,集成智能代码编辑、Gradle 构建、设备模拟、界面预览、调试测试及性能分析工具,













