一对多的关系不起作用

时间:2016-03-06 18:59:48

标签: php laravel eloquent

我正在尝试与2个模型UserRole建立一对多关系。所以,我希望一个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');
    }

}

根据该链接,我认为RolePost相同,一个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'

这里究竟是什么错误?

4 个答案:

答案 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外部约束是否未签名'在您的角色迁移表中。