在默认用户表中更改laravel 5.6中的电子邮件列名称

时间:2018-07-04 07:43:47

标签: php laravel-5.6 laravel-authentication

我有我要在auth中使用的用户表,但问题是电子邮件字段是“ userEmail”而不是“ email”。

对于登录页面,我在LoginController.php中覆盖了以下方法

public function username()
{
    return 'userEmail';
}

,并在输入字段中更改了名称。

<input id="userEmail" type="email" name="userEmail" value="{{ old('userEmail') }}" class="{{ $errors->has('userEmail') ? 'is-invalid' : '' }}">

这对于登录很有效,需要解决“忘记密码”和“重置密码”表单的问题,因为它们不起作用

Laravel 5.6中的所有解决方案

3 个答案:

答案 0 :(得分:1)

您可以将访问器和更改器方法添加到用户模型:

public function getEmailAttribute() {
    return $this->attributes['userEmail'];
}

public function setEmailAttribute($value) {
    $this->attributes['userEmail'] = $value;
}

Docs here

答案 1 :(得分:0)

要保存修改php代码(以及破坏某些内容),创建用户表的sql视图并将实际字段名称映射到User类正在使用的名称可能更容易。

CREATE VIEW v_user_auth AS
SELECT user_id AS id
, user_created_time AS created_at
, user_updated_time AS updated_at
, user_name AS name
, user_email AS email
, user_password AS password
, user_remember_token AS remember_token
FROM t_user

在User.class中添加以下内容以使用视图:

protected $table = 'v_user_auth';

答案 2 :(得分:-1)

我认为您可以利用Laravel Mutators:

https://laravel.com/docs/5.6/eloquent-mutators

还没有时间测试以下内容,但应该是您要寻找的内容:

class User extends Model
{
    /**
     * Get the user's email.
     *
     * @param  string  $value
     * @return string
     */
    public function getEmailAttribute($value)
    {
        return $this->userEmail;
    }
}