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

Laravel Sanctum调用createToken生成token时出现SQL字段类型不匹配错误

根因分析
  • 你的User模型主键采用了UUID字符串类型,但Sanctum默认提供的personal_access_tokens表迁移文件中,$table->morphs('tokenable')会自动生成bigint类型的tokenable_id字段,字段预期类型与实际传入的UUID字符串类型不匹配,触发写入错误。
解决方案

根据你的业务需求二选一即可:

方案1:适配UUID主键场景

如果你确认需要保留User模型的UUID主键配置,修改personal_access_tokens表的字段定义:

  1. 回滚已执行的personal_access_tokens表迁移,或新建独立的字段修改迁移
  2. 将原有迁移中的$table->morphs('tokenable');替换为以下代码:
$table->uuid('tokenable_id');
$table->string('tokenable_type');
$table->index(['tokenable_id', 'tokenable_type']);
  1. 重新执行迁移即可解决类型冲突问题。

方案2:恢复自增主键场景

如果是误配置导致User模型使用UUID主键,检查App\Models\User类中是否存在以下配置,删除即可恢复默认自增bigint主键逻辑:

// 移除以下两行配置
public $incrementing = false;
protected $keyType = 'string';

同时确认users表迁移中的主键定义为$table->bigIncrements('id');,重新执行迁移即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 01:09:03