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

Laravel 10移动User模型到新命名空间后报类找不到错误

问题分析

从错误栈能明确看出,报错根源是Laravel Sanctum的PersonalAccessToken模型在执行morphTo关联时,仍尝试加载旧命名空间的App\Models\User类——这是因为数据库中personal_access_tokens表的tokenable_type字段还存储着旧的模型命名空间值,迁移User模型后未同步更新这些历史数据。

解决方案

1. 更新数据库中的历史Token记录

执行SQL语句,将personal_access_tokens表中旧的模型命名空间替换为新的:

UPDATE personal_access_tokens 
SET tokenable_type = 'App\\Models\\V1\\User' 
WHERE tokenable_type = 'App\\Models\\User';

如果通过Laravel的DB门面执行,注意转义写法:

\DB::table('personal_access_tokens')
    ->where('tokenable_type', 'App\Models\User')
    ->update(['tokenable_type' => 'App\Models\V1\User']);

2. 确认Sanctum关联配置正确性

若后续生成的Token仍出现同类问题,需检查:

  • config/auth.php中所有guard的provider对应的model已更新为App\Models\V1\User
  • 若自定义了Sanctum的PersonalAccessToken模型,需确保其tokenable关联指向正确的模型;也可在User模型中明确Sanctum的关联规则:
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens;

    // 可选:明确指定Sanctum Token模型的关联
    public function tokens()
    {
        return $this->morphMany(\Laravel\Sanctum\PersonalAccessToken::class, 'tokenable');
    }
}

3. 重新清理缓存并生成Autoload

执行以下命令确保配置和类加载规则完全生效:

php artisan config:clear
php artisan cache:clear
composer dump-autoload

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 19:20:01