用户模型 laravel 中的自定义表

Posted

技术标签:

【中文标题】用户模型 laravel 中的自定义表【英文标题】:custom table in user model laravel 【发布时间】:2020-05-22 22:04:17 【问题描述】:

我正在使用 oauth2 并且我的表 users 是 "coUsers" 。我在我的用户模型中添加了这个

应用\用户

protected $table = 'coUsers';
public function getAuthPassword()
    
        return $this->pass;
    

授权控制器

public function login(Request $request)

    $request->validate([
        'usuario' => 'required|string|email',
        'clave' => 'required|string',
        //'remember_me' => 'boolean'
    ]);
    $credentials = [
        'usuario' => $request->get('usuario'),
        'password' => $request->get('clave'),
    ];

    if(!Auth::attempt($credentials))
        return response()->json([
            'message' => 'Unauthorized'
        ], 401);
    

    $user = $request->user();
    $tokenResult = $user->createToken('Personal Access Token');
    $token = $tokenResult->token;
    if ($request->remember_me)
        $token->expires_at = Carbon::now()->addWeeks(1);

    $token->save();

    return response()->json([
        'access_token' => $tokenResult->accessToken,
        'token_type' => 'Bearer',
        'expires_at' => Carbon::parse($tokenResult->token->expires_at)->toDateTimeString()
    ]);


public function firstLogin(Request $request)

    $request->validate([
        'usuario' => 'required|string|email|unique:users',
        'clave' => 'required|string',
        'nuevaClave' => 'required|string'
    ]);

    $user = User::where('usuario', $request['usuario'])
                ->where('clave', $request['clave'])
                ->first();

    $user->clave = bcrypt($request['nuevaClave']);
    $user->first_login = false;
    $user->save();
    return response()->json([
        $user->toArray()
    ]);

身份验证登录工作正常,但我想在 firstLogin 中使用 User::where .... 我收到此错误:

Illuminate\Database\QueryException: SQLSTATE[42703]: Undefined column: 7 ERROR: column "usuario" 不存在 第 1 行:从 "users" 中选择 count() 作为聚合,其中 "usuario" = ... ^ (SQL: select count() as aggregate from "users" where "usuario" = xxxxx@gmail.com) 在文件 \vendor\laravel\framework\src\Illuminate\Database\Connection.php 第 669 行

查看 users 表,而不是使用我在模型中指定的表。

【问题讨论】:

能否请您提供更多关于您在哪里呼叫 User::where... 的信息? 是的,我编辑了我的问题。谢谢 在下面查看我的答案 【参考方案1】:

您可以在 firstLogin 方法中将 'usuario' => 'required|string|email|unique:users', 更改为 'usuario' => 'required|string|email|unique:coUsers',

您也可以在App\Http\Controllers\Auth\RegisterController 中的validator 方法中更改此'unique:users'

'email' => ['required', 'string', 'email', 'max:255', 'unique:users']

protected function validator(array $data)

        return Validator::make($data, [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:coUsers'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);

【讨论】:

以上是关于用户模型 laravel 中的自定义表的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.5 模型上的自定义软删除

如何使用验证“唯一”访问 Laravel 中的自定义文本框名称?

Laravel 5.6.7 和 Vue.js 中的自定义错误消息,尤其是组件

在没有类依赖的自定义类/子系统中使用 Laravel 4 模型

Django Rest 框架中的自定义用户模型注册

如何将控制器中的 Laravel 4.2 beforeFilter 转换为 Laravel 5.2 中的自定义中间件