Трехсторонняя сводная таблица позволяет получить информацию обо всех командах, к которым принадлежит пользователь, и о ролях для каждой команды. - PullRequest
0 голосов
/ 31 января 2019

Я использую отношение ownToMany между пользователями, командами и таблицами ролей.

Я хочу сделать запрос ко всем командам, к которым принадлежит аутентифицированный пользователь, и получить все роли, для которых он предназначен.та команда под.Затем я хочу вывести его в JSON.(Я не использую клинок).

Пользователь Фрэнк :

Команда 1:

  • Менеджер
  • Игрок

Команда 2:

  • Менеджер

Команда 5:

  • Игрок

Вывод запроса для отображения отношений

Примечание: этот запрос должен показать отношения для ответа return User::first(1)->with('teams','roles')->get();

Вывод:

{  
   "id":1,
   "username":"Frank",
   "name":"Frank",
   "email":"frank@example.com",
   "teams":[  
      {  
         "id":21,
         "name":"Team 1",
         "pivot":{  
            "user_id":1,
            "team_id":21,
            "role_id": 1
         }
      },
      {  
         "id":1,
         "name":"Team 2",
         "pivot":{  
            "user_id":1,
            "team_id":1,
            "role_id":1
         }
      },
      {  
         "id":3,
         "name":"Team 5",
         "pivot":{  
            "user_id":1,
            "team_id":3
            "role_id":2
         }
      }
   ],
   "roles":[  
      {  
         "id":1,
         "name":"Manager",
         "pivot":{  
            "user_id":1,
            "role_id":1,
            "team_id":21
         }
      },
      {  
         "id":2,
         "name":"Player",
         "pivot":{  
            "user_id":1,
            "role_id":2,
            "team_id":21
      },
      {  
         "id":1,
         "name":"Manager",
         "pivot":{  
            "user_id":1,
            "role_id":1,
            "team_id":1
         }
      },
      {  
         "id":2,
         "name":"Player",
         "pivot":{  
            "user_id":1,
            "role_id":2,
            "team_id":3
         }
      }
   ]
}

** Редактировать

Согласно этому сообщению на laravel.io, похоже, что для этой цели существует устаревший пакет, который работает только с Laravel 4

Сценарий 2

Для каждого пользователя я хочу знать, в каких командах он находится и какие роли он выполняет в этой конкретной команде: пользователи-> команда-> роли

1 Ответ

0 голосов
/ 31 января 2019

добавить следующий метод в модель пользователя:


public function getRolesAttribute(){
   return $this->with('teams.roles')->teams->pluck('roles.name')->flatten()->unique()->toArray();
}

теперь, если вы извлекаете роли пользователя, такие как User::first()->roles, он должен возвращать массив имен ролей.

удачи

...