Как составить запрос к БД?
1. таблица shops (магазин)
id,
2. таблица shop_map_point (точку на карте, у каждого магазина может быть несколько точек)
id, city_id
3. таблица products (товар)
id, shop_id, category_id
4. таблица categories (категория)
id,
5. city (города)
id,
В категории id = 5, в городе id = 10 Нужно выбрать все товары, у которых
- МАГАЗИН имеет ТОЧКУ НА КАРТЕ (city_id = 10)
- У этих МАГАЗИНОВ есть ТОВАР в этой КАТЕГОРИИ (category_id = 5)
использовать лен. загрузку к товару (чтобы потом при foriech к товару без лишних запросов можно было добавить название магазина) ->with()
})
->get();
пробую делать так, но
- так как у магазина может быть много ТОЧЕК
- выходят одни и те же магазины с точками
эльдорадо - 1 точка
эльдорадо - 2 точка
сибвез - 1 точка
сибвез - 2 точка
а это как-то многовато данных получается
И так и не ответили, можно ли тут обойтись без джойнов? Можете не отвечать кодом, хотяб скажите куда копать.
Я не работаю на фрилансе, и никогда не работал программистом. Учусь сам.
turindd, копай в сторону документации. Там ты узнаешь и про «лен.загрузку», хотя здесь подразумевается «жад. загрузка», и про ->with(), который есть только у моделей, и ещё много чего полезного.
тут идет задвоение товаров из-за того что shop_map_point может быть много с city_id в одном shop
как решить эту проблему?
Has тут не поможет, так как тут он не поддерживается, или я не правильно его применяю.
почти как я фильтр делал)
Для себя хочу подчеркнуть, а если я хочу так же сделать через джойны, но там whereHas не проходит, что необходимо сделать. Код выше в комментариях.
Спасибо!
turindd, не нужны здесь джоины. Отношения - это половина функционала Ларавел. Если их не использовать нет смысла использовать Ларавел, пишите на пхп. Джоин можно юзать если whereHas начинает тормозить в сложных запросах (анпример полиморфных) с большим количеством данных, или где без джоин нельзя.