您的位置:首页 >Laravel 自定义 Eloquent 主键字段方法
发布于2026-04-15 阅读(0)
扫一扫,手机访问

当数据库表的主键不是默认的 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 模型类中明确指定主键字段名:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Destination extends Model
{
protected $table = 'tbl_destinations'; // 确保表名正确(如非约定命名)
protected $primaryKey = 'des_id'; // ✅ 关键:声明自定义主键
public $incrementing = false; // 若 des_id 非自增(如 UUID、字符串),需设为 false
protected $keyType = 'string'; // 若 des_id 为字符串类型,建议指定 keyType
}✅ 注意事项:
完成配置后,原路由逻辑即可正常运行:
$destination_id = Destination::where('des_id', $request->destination_id)->firstOrFail();
// ✅ 现在 Eloquent 完全识别 des_id 为主键,不再尝试访问 id 字段这是 Laravel 适配非标准数据库设计的标准实践,既轻量又可靠。
上一篇:Via浏览器网页缩放怎么用
下一篇:抖音拍视频怎么赚钱?新手必看攻略
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9