2015-04-01 83 views
3

錯誤信息是由數據庫中的錯誤字段引起的。使用帶自定義表字段名稱的Laravel 5 Auth?

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

身份驗證的默認領域是數據庫領域不同,我想用在身份驗證數據庫中的字段。

例如:我的數據庫中的email字段調用user_email,我想將數據庫字段更改爲auth字段。

那麼,有沒有辦法做到這一點? 對不起,我的英文不好:)

THX;

+0

發佈您的驗證碼登錄代碼。問題在那裏。 – Laurence 2015-04-01 06:35:41

+0

[如何在Laravel 5.2中使用不同的數據庫表列名稱進行登錄?](http://stackoverflow.com/questions/35692506/how-to-get-login-with-different-database-table-column -name合laravel-5-2) – Tunaki 2016-03-06 14:05:15

回答

1

你可以在你的控制器的Auth :: attemp方法中設置你喜歡的任何列。

在你的情況bewlow結構應該工作

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

其實我們可以覆蓋的getter/setter以雄辯的模式,但我還沒有嘗試過的用戶模型。

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

    function setEmailAttribute($value) { 
     return $this->attributes['user_email']=$value; 
    } 
} 
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'; 
} 

然後,它的工作原理是在特質覆蓋的用戶名()方法。 乾杯!