Laravel 8 用户 table 列名称

Laravel 8 user table column names

我正在与现有用户 table 一起使用 laravel 8。除了密码重置 link 功能外,一切都按预期工作。这是因为我的 table 的电子邮件列名称为“电子邮件”而不是“电子邮件”。其他应用程序使用此 table,因此无法更改列名。如果我在框架本身内手动设置列名称(如下示例),我可以使密码重置 link 功能正常工作。

文件:/vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php

public function retrieveByCredentials(array $credentials)
{
    // framework code that retieves the user record for email address

    if ($res) {
        $res->email = $res->Email;
    }

    // rest of frame work code
}

这似乎有点“hacky”。有更好的方法吗?

Laravel 将大大受益于有关用户 table 的更多自定义(自定义用户 table 名称、列名称等)。

Laravelmutatorsaccessors。这样您就可以更改 -> 电子邮件访问或分配它的行为。将此代码段添加到您的 User.php 模型中。

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

您可以阅读有关它的 docs。函数的命名约定是get{PropertyName}Attribute,如果你这样定义你的函数,你可以很容易地覆盖Laravel中的属性逻辑。使其使用 column Email.