2015-08-14 56 views
1

我正在使用自定义的表。这是简单的用户角色功能。但不使用传统的Eloquent数据库模式样式。Laravel 5 belongsToMany()自定义表

表用户

  1. 用户id(PK)
  2. 用户名(VARCHAR)

表角色

  1. 角色ID(PK)
  2. ROLENAME(VARCHAR)

表的UserRole 枢轴柱

  1. userroleId
  2. 角色ID
  3. 用户id

现在我模型用户具有这种方法

public function roles() 
{ 
    return $this->belongsToMany("App\Role", "userrole", "roleId", "userId"); 
} 

当我米AKE这样调用它给出错误

$roles = App\User::where("userId", "1")->first()->roles; 
dd($roles); 

错误它显示的是:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'role.id' in 'on clause' (SQL: select `role`.*, `userrole`.`roleId` as `pivot_roleId`, `userrole`.`userId` as `pivot_userId` from `role` inner join `userrole` on `role`.`id` = `userrole`.`userId` where `userrole`.`roleId` is null) 

这是我小小的要求。请不要建议更改表格模式。我不能。我坚持这一点。 谢谢!

+0

这是我的谦卑回应,请遵守惯例,除非你有一个有意义的名字,比如'email','SSN'等。 – Asim

+0

@Asim不需要这样的回应,我希望我们都有能力在每一个我们工作的项目中始终遵循Taylor Otwell的约定,当你必须在Zend Framework v1和Codeigniter中选择狗屎时,我将理解成为一名专业的Web开发人员是什么感觉。 – JonnySerra

回答

2

您是否在“userrole”模型上设置了主键?

Laravel自动假定你的主键被命名为id

看到这个:http://laravel.com/docs/5.1/eloquent

在主键部分请看:

口才也将承担每个表都有一个名为id一个主键列 。你可以定义一个$primaryKey属性来覆盖这个 约定。

尝试去驾驭它在您userrole模型像这样:

protected $primaryKey = 'roleId'; 

尝试仔细阅读所有doccumentattion。

+0

谢谢!这是问题!非常感谢。 –