SQL Фильтр по списку идентификаторов - PullRequest
3 голосов
/ 19 февраля 2020

У меня есть три таблицы

1-rests
2-amenity_rest
3-amenities
rests
id      name
1       rest1
2       rest2
3       rest3

amenities
id     name
1      amenity1
2      amenity2
3      amenity3

amenity_rest
rest_id         amenity_id
1                  1
1                  3
2                  2
3                  1

Я хотел бы отправить список удобств, например [1,3]

, и он должен вернуть остальное, что его id = 1

и если я отправлю массив [1,2,3], он не вернет никакого результата

Как будет выглядеть такой запрос?

Ответы [ 2 ]

4 голосов
/ 19 февраля 2020

Вы можете построить запрос как:

select ar.rest_id
from amenity_rest ar
where ar.amenity_id in (1, 2, 3)
group by ar.rest_id
having count(*) = 3;  -- "3" = size of list
1 голос
/ 19 февраля 2020

Ваш контроллер должен иметь такую ​​функцию:

function retrieveData(Request $request){
    $data = Amenities_rest::whereIn('amenity_id', $request->amenities)
                            ->groupBy('rest_id')
                            ->havingRaw('COUNT (*) = ' . count($request->amenities))
                            ->get();
    return $data
}

Это должно сделать это. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...