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

Laravel 10注册Artist与Client时提示users表不存在的问题求助

解决多用户类型注册时"users表不存在"的问题

核心问题

错误提示在查询users表的唯一性,说明代码中仍有逻辑依赖默认的users表,以下是针对性修复步骤:

1. 修正验证器的唯一性规则

你的validator方法大概率沿用了默认的unique:users规则,需要替换为对应表名:

protected function validator(array $data)
{
    return Validator::make($data, [
        'username' => ['required', 'string', 'max:255', 'unique:artists'], // 改为artists表
        // 其他字段验证规则...
    ]);
}

Client的验证器同理,将unique:artists替换为unique:clients。

2. 配置Auth守卫与用户提供者

修改config/auth.php,添加artist和client的守卫及对应提供者:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    // 新增artist守卫
    'artist' => [
        'driver' => 'jwt',
        'provider' => 'artists',
    ],
    // 新增client守卫
    'client' => [
        'driver' => 'jwt',
        'provider' => 'clients',
    ],
],

'providers' => [
    // 不需要可删除默认users配置
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],
    // 新增artists提供者
    'artists' => [
        'driver' => 'eloquent',
        'model' => App\Models\Artist::class,
    ],
    // 新增clients提供者
    'clients' => [
        'driver' => 'eloquent',
        'model' => App\Models\Client::class,
    ],
],

3. 确保模型正确指定表名并实现JWT接口

Artist和Client模型需要明确指定表名,并且实现JWTSubject接口:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use PHPOpenSourceSaver\JWTAuth\Contracts\JWTSubject;

class Artist extends Model implements JWTSubject
{
    // 指定对应的数据表
    protected $table = 'artists';

    // 允许批量赋值的字段
    protected $fillable = ['username', 'password', /* 其他字段 */];

    // 实现JWTSubject接口的方法
    public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    public function getJWTCustomClaims()
    {
        return [];
    }
}

Client模型做同样修改,将$table设为clients。

4. 调用JWTAuth时指定守卫

生成token时需要指定对应守卫,避免使用默认的users守卫:

// 原代码
$token = JWTAuth::fromUser($artist);
// 修改为
$token = JWTAuth::guard('artist')->fromUser($artist);

Client注册时改为JWTAuth::guard('client')->fromUser($client);

5. 检查createArtist方法

确保createArtist方法创建的是Artist模型实例,而非默认的User:

protected function createArtist(array $data)
{
    return App\Models\Artist::create([
        'username' => $data['username'],
        'password' => Hash::make($data['password']),
        // 其他字段...
    ]);
}

完成以上步骤后,重新清除缓存并测试:

php artisan config:clear
php artisan cache:clear

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:33:26