Фильтр отношений Laravel по идентификатору компании

#laravel #api #relationship

Вопрос:

Я создаю API laravel с функцией пользовательских разрешений. Это моя структура таблиц:

 User id | email | password  Company id | companyName  Permissions id | name  User_has_permissions user_id | company_id | permission_id  

Я получаю пользователя и разрешения с помощью кода ниже в модели:

 public function permissions() {  return $this-gt;belongsToMany(Permission::class, 'user_has_permission', 'user_id', 'permission_id'); }  

И в контроллере:

 public function show($company_id, $user_id) {  //now I need return only permissions related with $company_id  return User::with(['permissions'])-gt;find($User_id); }  

Теперь мне нужно получить пользователя и ваши разрешения, но только связанные с идентификатором компании.

У кого-нибудь есть какие-либо идеи, как я могу получить этот результат?

Любая идея приветствуется.

Большое спасибо.

Ответ №1:

Вы можете выполнять запросы с помощью includes, используя синтаксис значения ключа в качестве параметра. В BelongsToMany , он внутренне соединяется со сводной таблицей, что позволило бы добавить условие на comapny_id .

 return User::with(['permissions' =gt; function ($query) use ($company) {   $query-gt;where('user_has_permission.company_id', $company-gt;id); }])-gt;find($id);  

Комментарии:

1. Не проверено, так что протестируйте его и посмотрите, поможет ли это 🙂