2014-01-15 8 views
4

Я уже размещал это на форумах laravel, но никто не мог помочь. Думал, что я отправлю здесь второе мнение.3-сторонние отношения с Laravel и Eloquent

Мне нужен небольшой совет/помощь в том, как структурировать мои модели. Вот что я пытаюсь сделать

Пользователь может быть членом нескольких команд, но пользователь может выполнять другую роль в каждой команде.

Идея состоит в том, что пользователь видит другой набор данных/функций в зависимости от роли, которую они занимают в команде.

Так я думал о чем-то вроде:

Users 
id, name, email, etc... 

Teams 
id, name, description 

Roles 
id, name 

Team Users 
user_id, team_id, role_id 

В таблице team_members бы связать 3 части вместе. Определение групп пользователей и их роли.

Мои вопросы:

  1. Является ли это лучший способ идти о таких отношениях
  2. Как бы я назначить пользователя в команде с ролью?
  3. Использование Eloquent, как я могу получить роль пользователя в данной команде?
+0

Я нахожусь в почти идентичном сценарии. Если я могу спросить, как вы решили это, так как вы не приняли никаких ответов? – Iain

+0

В конце концов я работал над этим, но ответ должен иметь модель для вашей сводной таблицы. Pivot имеет отношение к модели «role», поэтому вы можете получить доступ к $ user-> pivot-> role – Mcg1978

+1

Спасибо, я пришел к такому же выводу. – Iain

ответ

2

Из вашего сценария, таблицы, которые вы определяете выглядит хорошо, чтобы назначить пользователю команды и его роль, при условии создания модели командного игрока за столом вы можете сделать что-то вроде:

//assign or update user team or role 
$new_member = TeamMember::firstorCreate(array(
       'user_id' => $this->user->id, 
       'team_id' => $team_id, 
       'role_id' => $role_id, 
      )); 

//accessing the role of a user on a team 
$role = TeamMember::where('user_id', '=', $user_id) 
     ->where('team_id', '=', $team_id)->first()->role_id; 

//get the name of the role 
$role_name = Role::find($role)->name; 
Смежные вопросы