自定义模型和字段与Sentinel/Laravel


Custom Model and fields with Sentinel / Laravel

I',将新系统集成到现有数据库中。

因此,我的User表没有默认的字段名称。

所有的名字都是西班牙语的,所以,Sentinel在应该寻找"correo"的时候会寻找电子邮件

此外,在执行时

Sentinel::check(), 

我收到这个消息错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'administrador.id' in 'where clause' (SQL: select * from `administrador` where `administrador`.`id` = 1 and `administrador`.`deleted_at` is null limit 1)

事实上,id并不存在,PK被称为administrarid

我找到的唯一资源是一个非常快速的资源:

https://github.com/cartalyst/sentinel/wiki/Extending-Sentinel

它说这非常容易,但没有提到这个案例。

那么,基本上,我如何自定义Sentinel模型的所有字段名称???

这是我的型号:

class Administrador extends EloquentUser {
protected $table = 'administrador';
protected $fillable = [];
protected $guarded = ['administradorid'];
protected $hidden = ['contrasena', 'remember_token'];
use SoftDeletes;
protected $dates = ['deleted_at'];
}

任何帮助都将不胜感激!

首先,id问题是一个基本的Laravel-Eloquent问题。如果模型的主键不是id,则需要将模型的$primaryKey属性设置为正确的字段名。此外,如果主键不是自动递增的整数,则还需要将$incrementing属性设置为false

对于email问题,这是Sentinel特有的问题。EloquentUser类具有$loginNames属性,该属性设置为包含用户登录名的有效字段名数组。默认值仅为['email'],因此需要覆盖此属性并将其更改为字段名。

因此,您的Administrador类最终看起来像:

class Administrador extends EloquentUser {
    use SoftDeletes;
    protected $table = 'administrador';
    protected $primaryKey = 'administradorid';
    //public $incrementing = false; // only if primary key is not an autoinc int
    protected $fillable = [];
    protected $guarded = ['administradorid'];
    protected $hidden = ['contrasena', 'remember_token'];
    protected $dates = ['deleted_at'];
    // Sentinel overrides
    // array of fields that hold login names
    protected $loginNames = ['correo'];
}