2015-08-14 55 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

謝謝!這是問題!非常感謝。 –