我正在尝试与2个模型User
和Role
建立一对多关系。所以,我希望一个User
只能有一个角色,Role
可以分配到User
以上。我尝试按照https://laravel.com/docs/5.1/eloquent-relationships#one-to-many上的官方教程进行操作,最后得到了这个:
class User extends Model
{
public function role()
{
return $this->belongsToMany('App\Admin\Role');
}
}
class Role extends Model
{
protected $table = 'roles';
public function users()
{
return $this->hasMany('App\Admin\User');
}
}
根据该链接,我认为Role
与Post
相同,一个Role
可以分配给许多User
。但是,这不是很有效,以下是我尝试访问特定User
$role_first = $user->role; // Eloquent\Collection
$role_second = $user->role(); // Eloquent\Relations\BelongsToMany
$role_first->role_title // 'Undefined property: Illuminate\Database\Eloquent\Collection::$role_title'
$role_second->role_title // exception 'ErrorException' with message 'Undefined property: Illuminate\Database\Eloquent\Relations\BelongsToMany::$role_title'
这里究竟是什么错误?
答案 0 :(得分:2)
在User
班级
public function role()
{
// not $this->belongsToMany('App\Admin\Role');
return $this->belongsTo('App\Admin\Role');
}
因为您想要oneToMany
而不是manyToMany
关系。
答案 1 :(得分:0)
这应该这样做。请试一试
class User extends Model
{
public function role()
{
return $this->hasOne(App\Admin\Role::class);
}
}
// user belongs to one role
class Role extends Model
{
protected $table = 'roles';
public function users()
{
return $this->belongsTo(App\Admin\User::class);
}
}
答案 2 :(得分:0)
用户模型
class User extends Authenticatable{
public function roles(){
return $this->belongsTo('App\Admin\Role');
}
}
角色模型
class Role extends Model{
public function users(){
return $this->hasMany('App\Admin\User');
}
}
用户只能拥有一个角色,并且可以将角色分配给许多用户。
答案 3 :(得分:0)
确保关系
所以,在这种情况下
self.clientmap
并且必须检查你的user_id外部约束是否未签名'在您的角色迁移表中。