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表的字段定义:
- 回滚已执行的
personal_access_tokens表迁移,或新建独立的字段修改迁移 - 将原有迁移中的
$table->morphs('tokenable');替换为以下代码:
$table->uuid('tokenable_id'); $table->string('tokenable_type'); $table->index(['tokenable_id', 'tokenable_type']);
- 重新执行迁移即可解决类型冲突问题。
方案2:恢复自增主键场景
如果是误配置导致User模型使用UUID主键,检查App\Models\User类中是否存在以下配置,删除即可恢复默认自增bigint主键逻辑:
// 移除以下两行配置 public $incrementing = false; protected $keyType = 'string';
同时确认users表迁移中的主键定义为$table->bigIncrements('id');,重新执行迁移即可。
内容的提问来源于stack exchange,提问作者bwoogie
相关产品推荐
相关产品推荐

