我的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
实例。
有人可以告诉我出了什么问题吗?
答案 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)