flaberd
@flaberd
Фрилансер

Как сформировать необычный запрос по связанным таблицам Yii2?

Есть 2 таблицы со связью многие ко многим
Первая (users)
id | name
1 | maxim
2 | lena

Вторая (roles)
id | role_name
1 | admin
2 | moder
3 | author

И таблица связей (relation)
id | user_id | role_id
1 | 1 | 2
2 | 2 | 2
3 | 2 | 3

И так Максим у нас только модер а Лена и модер и автор.
В модели Users прописана связь
public function getRoles(){
		return $this->hasMany(Roles::className(),['id'=>'role_id'])
		            ->viaTable('relation', ['user_id' => 'id']);
	}

Делаем запрос
$query = Users::find()
			->joinWith(['roles rl'])
 ->andWhere(['rl.id', $searchModel->roles])
->all();

"$searchModel->roles" - Параметр передаваемый из формы являет собой массив чисел ( id ролей) в данном примере передадим такой массив [2,3].

И само собой получим Максима и Лену что правильно так как во "Where" имеем "rl.id in (2,3)"
но мне нужно получить только ту запись у которой есть оба значения а не одно из (в данном случае Лену)

пробовал делать вот так
$query = Users::find()
			->joinWith(['roles rl']);
 foreach ($searchModel->roles as $role){
			$query->andWhere(['=','rl.id', $role]);
}
$result = $query->all();

И само собой получил null что ожидаемо.
Прошу подсказать вариант решения данного вопроса. А именно получения записи у которой будут оба значения со с вязаной таблицы а не одно из.
  • Вопрос задан
  • 74 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы