Auth :: user()关系返回null laravel 5.3

时间:2017-11-28 17:40:39

标签: php authentication laravel-5.3 relationship

我的App\User模型中有以下代码。

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'username','dob','name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token','created_at','updated_at',
    ];

    protected $dates =[
        'dob',
    ];

    public function roleuser(){
        return $this->belongsTo('App\Role');
    }
}

类CreateRolesTable扩展了Migration {

public function up()
{
    Schema::create('roles', function (Blueprint $table) {
        $table->increments('id');
        $table->string('rolename');
        $table->timestamps();
    });
}


public function down()
{
    Schema::dropIfExists('roles');
}

}

类CreateUsersTable扩展了Migration {

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('role_id')->unsigned()->default(2);
        $table->string('username',32);
        $table->date('dob');
        $table->string('name');
        $table->string('email');
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });
}


public function down()
{
    Schema::dropIfExists('users');
}

}

我在用户和角色之间使用1比1的关系。

从Blade模板调用{{ Auth::user()->roleuser }}会返回null,但我期待App\Role实例。

有人可以告诉我出了什么问题吗?

2 个答案:

答案 0 :(得分:0)

  

我在用户和角色之间使用1对1的关系。

如果您正在使用一对一的关系,那么您应该使用hasOne method,这样它将返回模型的实例,而不是我认为您现在正在获得的集合(不是null) )就像你想的那样。

答案 1 :(得分:0)

您必须定义用于关系的密钥。您没有将任何其他参数传递给关系方法以覆盖命名约定。默认情况下,它会查找非常特定的命名字段。它会查找roleusers_id,因为您将方法命名为roleusers而不是更常规的role名称。如果您将其命名为role,则默认会查找role_id字段。如果将其命名为roleusers,则需要覆盖使用的密钥。 [文档直接提到这一点]

Laravel 5.3 Docs - Eloquent - Relationships - One to Many (Inverse)