Запрос graphql для получения places по региону
Выполняется
Проект: Учебный проект pivo-moscow
Планируемый запуск: | Дата начала: | Планируемое завершение: | Дата завершения: |
Описание задачи
Николай, нужна твоя подсказка.
Как сюда
query places($where: PlaceWhereInput) {
places(where: $where){
id
}
}
можно запихать условия ограничить выдачу заведений только Московского региона?
Проект | Задача | Статус | Дата постановки | Начало | Конец | Кто создал |
---|---|---|---|---|---|---|
Учебный проект pivo-moscow | Запрос graphql для получения places по региону | Выполняется | 27.01.2021 17:45:20 | 28.01.2021 00:09:30 | 28.01.2021 01:04:37 |
Дима, можно вот так:
Только имей ввиду, что здесь OR - эуто усливие на адрес (адрес такой или адрес такой). Если суммировать с другими условиями
Но это не очень точные данные, потому что честной связи Заведение-Город у тебя нет. Так что придется еще пройтись по списку заведений в Москве (там они выбираются по удаленности широта-долгота), и где адреса не соответствуют этому правилу, подправить. Но в целом, сейчас это условие выдает цифру, близкую к тем, что на карте выводится.
То есть у тебя в БД нет признака Город или Регион. Есть только координаты.
Поэтому, если такое надо делать, то надо вводить у объекта признак Город и редактировать все заведения. Но их там почти 4000. БОльшую часть можно обновить массово, накидав скрипт через яндекс-АПИ, чтобы по координатам получить ближайший город, и если он соответствует городу из списка в базе, то его назначить.
Спасибо, понял! По этому пути я в https://pivo-voronezh.ru/ пошел. Добавить сюда ещё МО и это закроет вопрос.
Кстати, в этом случае будет же работать выбор региона + статус "лучшее заведение"? Насколько я помню - выборку по координатам и этому параметру вместе сделать нельзя.
Дима, у нас нет выборки по координатам. У нас есть только сортировка по координатам. Это принципиально иной случай. Выборка отсекает (условие where), то если позволяет выбрать ограниченное количество только тех, кто отвечает условиям. Сортировка (sortBy|orderBy) только сортирует. Но эти подходы конечно же можно сортировать. То есть ты можешь сделать выборку по условию, в том числе по статусу "Лучшее заведение" и полученные записи отсортировать по координатам.
То есть берется центральная координата (например - координата центра Москвы) и сортируется по расстоянию координаты заведения от этой точки? Понял.
Но вообще действительно просится еще 2 поля: Город и Регион(на всякий случай). В целом можно и руками внестись, так как прямо вот жить не быть и сразу все равно не нужно вноситься) Плюс SQL запросами можно жизнь себе упростить/
Ну вот тогда тебе надо бэк развивать, добавлять эти поля. Создай себе задачу на это. Но пока ты это сам скорее всего не сделаешь, а мне пока некогда, к сожалению. Но пусть будет. Будет время, сделаю.
Пока не буду: все равно надо будет учиться формировать апи
Николай, приветствую!
Нужен твой совет.
Подскажи, пожалуйста, как условие запихать правильно. Запихать надо сюда:
А условие взть отсюда:
Дима, привет!
А зачем условие пихать сюда? Это же сам запрос с прописанными параметрами, в том числе и $where. Не надо в него пихать, надо вызывать этот запрос с передачей в него условия (в твоем случае "where": { "address_contains": "Москва" }).
Что-то мещает это сделать?
Но ведь в BeerWhereInput нет поля address_contains, на что и ругается. Вои т теряюсь, как так передать параметр в запрос)
Аа, это я затупил. У меня в плейграунде уже был запрос заведений, вот и я сбился. А оказывается тебе надо пиво...
Но и тут не сложнее. У нас же есть связь с заведениями. Соответственно, практически все запросы на них можно формировать и в связанных объектах. В данном случае такое условие:
То есть пиво, у которого хотя бы одно заведение имеет в адресе "Москва".
Есть еще places_none, то есть ни одно заведение, и places_every, то есть для коготорого все заведения будут удовлетворять условию.
Понял, спасибо!! Вот как раз было не понятно, как условия "глубже" задавать.
Не за что!
Николай, нужна твоя подсказка... Опять.
Есть gql звпрос:
Получает id пива - возвращает что попросил.
Добавляю
places{
id
Place{
name
address
}
}
Получаю данные заведений, в которых это пиво присутствует.
А вот приладить условие
не получается, так как places_some отсутствует в BeerWhereUniqueInput ,что понятно - там вообще только id присутствует.
Вопрос: может вообще на странице пива не BeerWhereUniqueInput, а BeerWhereInput?
Можно и BeerWhereInput использовать. Только тут придется не одно пиво получать, а массив, то есть из него еще выдернуть конечную сущность.
Но в данном случае я бы поступил иначе. Если задача в том, чтобы получить именно заведения с конкретным условием внутри конкретного объекта пива, то я бы условие адреса добавил в условие получения адресов. Это в любом случае было бы логичней. Ведь если ты ищешь пиво с учетом адреса, значит и адреса тебе нужны конкретные. Схема тебе позволяет.
Ну а далее, если ты, получив данные, хочешь убедиться, что заведения нужные в нем есть, просто проверишь beer.places.length и все. Дальше решишь что делать, если заведений в нем нет.
Иначе тут делать нет смысла. Ведь у тебя четкий ID пива, так что по сути искать не надо. И не должно быть такого, что оно то есть, то нету. А то завтра добавят тебе пиво и одно заведение, где оно продается, у тебя появится страница на сайте, она проиндексируется, а потом заведение закроется и все, пиво будет отдавать 404. Это разве дело?