Я хотел бы захватить всех пользователей, которые говорят Portuguese
и English
.
Прямо сейчас у меня есть следующая команда SQL:
SELECT *
FROM `users_language`
WHERE `users`.`id` =
`users_language`.`user_id`
AND ( `language_id` = 'en'
OR `language_id` = 'pt' )
Я использую Laravel
в качестве основы.Пользователь может добавить несколько языков для фильтрации, например Portuguese
, English
, German
и т. Д. Вот почему у меня следующий код:
$candidates->whereHas('user.languages', function ($q) use ($request){
foreach($request->language as $index => $language_code){
$q->where('language_id', $language_code);
// $q->where('speaking', '>=', $request->speaking[$index]);
// $q->where('writing', '>=', $request->writting[$index]);
// $q->where('comprehension', '>=', $request->comprehension[$index]);
}
});
Первый запрос:упрощенная версия для тех, кто не понимает Laravel/PHP
.Полный запрос для этого написан следующим образом:
SELECT `user_id`,
`cover_letter`,
`selected`
FROM `jobs_application`
WHERE `jobs_application`.`job_id` = ?
AND `jobs_application`.`job_id` IS NOT NULL
AND EXISTS (SELECT *
FROM `users`
WHERE `jobs_application`.`user_id` = `users`.`id`
AND EXISTS (SELECT *
FROM `users_language`
WHERE `users`.`id` =
`users_language`.`user_id`
AND `language_id` = ?
AND `language_id` = ?))
Всякий раз, когда я выбираю пользователя, который говорит Portuguese
и English
, я не получаю единственного пользователя, который говорит на обоих языках.Я хотел бы получить пользователей, которые говорят на языке, указанном в фильтрах.
Я пытался использовать whereIn()
, но это не позволит мне фильтровать позже по speaking
, writing
и comprehension
.Любая помощь будет принята с благодарностью.