使用Laravel 5 Auth和自定义表字段名称?

时间:2015-04-01 05:42:21

标签: php laravel-5

错误信息是由数据库中的错误字段引起的。

QueryException in Connection.php line 620: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'email' in 'where clause'

auth的默认字段与数据库字段不同,我想在auth中使用数据库字段。

例如:我的数据库email中的user_email字段,我想将数据库字段更改为auth字段。

那么,有没有办法做到这一点? 抱歉我的英语不好:)

THX;

3 个答案:

答案 0 :(得分:2)

实际上我们可以在Eloquent模型中覆盖getter / setter,但我还没有在User模型上尝试过它。

class User extends Model{   
    .....
    // overriding getter & setter
    function getEmailAttribute() {
        return $this->attributes['user_email'];
    }

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

答案 1 :(得分:1)

您可以在控制器的Auth :: attempt方法中设置您喜欢的任何列。

在你的情况下,下面的构造应该可以工作

Auth::attempt(['user_email' => $email, 'password' => $password]

答案 2 :(得分:0)

对于Laravel 5.4用户, 我阅读的一些参考资料,以使其有效,

https://medium.com/@simonhamp/why-and-how-to-override-laravel-s-built-in-auth-controller-methods-60f070897ac6

https://sujipthapa.co/blog/laravel-54-login-with-username-or-password

AuthenticatesUsers是实际具有登录过程的特征。

如果您要更改用户表格中的列名称,请发送电子邮件至'到你的专栏',

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

我们需要覆盖(?我实际上不是一个好的OOP开发人员),这个方法。

喜欢这个

在loginController中,

use AuthenticatesUsers {
  username as username;
}

public function username()
{
    return 'YOUR COLUMN';
}

然后它就像在trait中重写username()方法一样。 干杯!