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

Laravel中Auth::user()->id获取uniqid生成的用户ID被截断问题

解决Laravel中Auth获取字符串ID被截断的问题

问题原因

Laravel默认的User模型会将id字段视为自增整数类型,当你使用uniqid()生成的字符串ID时,模型会自动尝试将其转换为整数,导致字符串中数字后的非数字部分(比如示例中的d9)被截断。

解决方案

1. 修改User模型的ID类型配置

在app/Models/User.php中添加或修改以下两个属性,明确告知Laravel这是一个非自增的字符串ID:

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    // 关闭自增ID特性
    public $incrementing = false;

    // 指定ID的数据类型为字符串
    protected $keyType = 'string';

    // ... 其他原有代码
}

2. 确保数据库字段类型正确

如果之前的迁移已经执行,需确认数据库中users表的id字段确实是字符串类型(如VARCHAR或CHAR)。若修改迁移后未重新执行,可按以下步骤更新:

# 创建修改迁移文件
php artisan make:migration alter_users_id_type --table=users

在生成的迁移文件中写入:

public function up(): void
{
    Schema::table('users', function (Blueprint $table) {
        $table->string('id')->primary()->change();
    });
}

public function down(): void
{
    Schema::table('users', function (Blueprint $table) {
        $table->char('id', 13)->primary()->change();
    });
}

执行迁移:

php artisan migrate

3. 清除Laravel缓存

确保模型修改生效,运行命令清除缓存:

php artisan optimize:clear

验证

完成上述操作后,再次通过Auth::user()->id或Auth::id()获取用户ID时,就能得到完整的字符串ID(如64538065859d9)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:22:10