Laravel自定义主键不生效:仍查询id字段报错求助
Laravel 自定义主键后仍查询
id字段的解决办法 嘿,问题一眼就能看出来啦——你把模型里指定自定义主键的关键代码给注释掉了!Laravel 默认会把id当作主键字段,哪怕你设置了$incrementing = false(告诉框架主键不是自增整数),但没明确指定主键字段名的话,框架还是会沿用默认的id来构建查询语句,这就是你报错的核心原因。
解决步骤:
取消模型中
$primaryKey的注释,指定正确的主键字段
把Task.php里的注释去掉,明确告诉Laravel你的主键是taskn:class Task extends Model { protected $primaryKey = 'taskn'; // 取消这行的注释! public $incrementing = false; }这里
$primaryKey负责定义主键字段名,$incrementing = false说明主键不是自增的数值类型,两者配合才能让Laravel正确识别你的自定义主键。确认迁移已正确执行
你已经在迁移文件里设置了taskn为主键,记得确保这段迁移已经运行过:$table->string('taskn'); $table->primary('taskn');如果之前没执行迁移,运行以下命令(注意
migrate:refresh会清空现有数据,谨慎使用):php artisan migrate # 或者需要重置迁移时用 php artisan migrate:refresh路由模型绑定的额外检查(如果用到的话)
如果你用了路由模型绑定,确保路由参数的字段匹配你的主键:// 正确写法:指定用taskn字段匹配 Route::get('/tasks/{task:taskn}', [TaskController::class, 'show']);要是你用的是默认的
{task},在模型正确设置主键后,Laravel也会自动用taskn去匹配,但显式指定字段会更清晰。
这样调整后,Laravel就会用taskn代替id来构建查询语句,不会再出现找不到id字段的错误啦。
内容的提问来源于stack exchange,提问作者Aleksandar
相关产品推荐
相关产品推荐

