Laravel 11如何指定Sanctum自定义模型与多Schema表?
Laravel 11 多Schema架构下Sanctum自定义AccessToken模型配置方案
以下是解决该问题的具体步骤:
1. 确认自定义AccessToken模型的正确性
确保你的CustomPersonalAccessToken模型正确继承Sanctum基础模型,并且准确指定带Schema的表名(注意与数据库实际表名的大小写匹配,通常建议用小写格式):
namespace App\Models; use Laravel\Sanctum\PersonalAccessToken as SanctumPersonalAccessToken; class CustomPersonalAccessToken extends SanctumPersonalAccessToken { // 格式为「schema名称.表名」,需与数据库实际结构一致 protected $table = 'vendorinv.personal_access_tokens'; }
2. 通过Sanctum配置文件指定模型
Laravel 11中推荐通过配置文件设置自定义模型,比在ServiceProvider中配置更稳定:
- 首先发布Sanctum的配置文件:
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
- 打开生成的
config/sanctum.php文件,找到personal_access_token_model配置项,替换为你的自定义模型类:
'personal_access_token_model' => App\Models\CustomPersonalAccessToken::class,
3. 清除配置缓存
Laravel 11默认启用配置缓存,修改配置后必须清除缓存才能生效:
php artisan config:clear php artisan cache:clear
4. 验证配置生效
可以在路由或控制器中打印Sanctum当前使用的模型类来验证:
dd(Sanctum::personalAccessTokenModel());
如果输出为你的CustomPersonalAccessToken类名,说明配置成功,系统会自动使用指定的Schema和表名。
若仍有问题,检查以下两点:
- 数据库中
vendorinv.personal_access_tokens表是否存在,结构是否与Sanctum默认表一致 - 确保没有其他代码(如自定义认证守卫、中间件)硬编码使用默认的
PersonalAccessToken模型
内容的提问来源于stack exchange,提问作者Bill Keck
相关产品推荐
相关产品推荐

