2015-08-14 5 views
1

Я использую таблицы, сделанные на заказ. Это простая функция роли пользователя. Но не используя обычный стиль схемы базы данных Eloquent.Laravel 5 принадлежитToMany() на пользовательской таблице

Таблица пользователя

  1. идентификатор пользователя (ПК)
  2. имя_пользователя (VARCHAR)

Таблица Роль

  1. Идентификатор роли (ПК)
  2. RoleName (VARCHAR)

Таблица UserRole поворота колонки

  1. userroleId
  2. Идентификатор роли
  3. идентификатор пользователя

Теперь я модель Пользователь, который имеет этот метод

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

Когда я м ака называют, как это дает ошибке

$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

Вот мой скромный ответ, пожалуйста, следуйте соглашениям, если у вас нет значимого имени для таких ключей, как 'электронная почта',' SSN' и т. Д. – Asim

+0

@Asim нет необходимости в таком ответе, я бы хотел, чтобы у всех нас была роскошь быть в состоянии всегда следовать соглашениям Тейлора Отуэлла в каждом проекте, над которым мы работаем, когда вам нужно забрать дерьмо в Zend Framework v1 и Codeigniter, Я пойму, каково это быть профессиональным веб-разработчиком. – JonnySerra

ответ

2

Установили ли вы первичный ключ в своей модели «userrole»?

Laravel автоматически предполагает, что вы являетесь первичным ключом с именем id.

Смотреть это: http://laravel.com/docs/5.1/eloquent

Посмотрите на ключевой первичной секции:

Красноречивым также будем считать, что каждая таблица имеет столбец первичного ключа имени id. Вы можете определить свойство $primaryKey, чтобы переопределить это соглашение .

Попробуйте заменить его на вашей userrole модели следующим образом:

protected $primaryKey = 'roleId'; 

Попробуйте внимательно прочитать все doccumentattion.

+0

Спасибо! Это была проблема! Огромное спасибо. –

Смежные вопросы