错误信息是由数据库中的错误字段引起的。
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;
实际上,我们可以在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;
}
}
您可以在控制器中的Auth::attemp方法中设置任何您喜欢的列。
在你的情况下,低结构应该工作
Auth::attempt(['user_email' => $email, 'password' => $password]
对于Laravel 5.4用户,我读了一些参考资料使它发挥作用,
https://medium.com/@simonhamp/why-and-how-to-override-lavel-s-bilt-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()方法一样工作。干杯