Подключение сводной таблицы с несколькими таблицами в Eloquent

#php #database #laravel #eloquent #orm

#php #База данных #laravel #eloquent #orm

Вопрос:

У меня есть эта модель:

 User:
id (int)
name (varchar)

Role:
id int
name (varchar)

User_Role
id (int)
id_role (int)
id_user (int)
id_company (int)
  

Что мне нужно, используя Eloquent (Laravel 7), это запросить user_role с id_company:

Это моя взаимосвязь с пользовательской моделью

 public function rol() {
  return $this->belongsToMany('AppModelsRole','user_role','id_user','id_role');
}
  

Это мое отношение к модели для подражания:

 function user() {
   return $this->belongsToMany('AppModelsUser','user_role','id_role','id_user');
}
  

Возможно ли запросить сводную таблицу следующим образом:

 $user->rol->where(["id_company" => $params["id_company"]])->toArray();
  

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

1. Вы пытаетесь получить список пользователей, роли которых соответствуют этому id_company полю?

2. Привет! Я пытаюсь получить роль, соответствующую этому пользователю и id_company .

Ответ №1:

Сначала вам нужно включить столбцы сводной таблицы в взаимосвязь:

 public function roles() {
  return $this->belongsToMany('AppModelsRole','user_role','id_user','id_role')
              ->withPivot('id_company');
}
  

Затем вы можете выполнить запрос по столбцу сводной таблицы:

 $user->roles()->wherePivot('id_company', $params["id_company"])
              ->get()
              ->toArray();