
Nik
19.07.2018
05:03:20

В
19.07.2018
06:28:08
Спасибо!

ExPandable
19.07.2018
06:30:57
подскажите плиз. есть релейшн у продукта, допустим characteristics() который возвращает hasOne()
запрос достаточно тяжелый, и я хочу попытаться его кешировать, но как я понял релейшны нельзя кешировать.
как тогда быть?

Google

Илья
19.07.2018
06:32:55
hasOne тяжёлый?

ExPandable
19.07.2018
06:33:20
их очень много
например, на главной странице около 80 запросов

Евгений
19.07.2018
06:34:15
With юзай

ExPandable
19.07.2018
06:34:20
ну может я из пушки по воробьям конечно
я просто дебаггер открыл и смотрю сколько запросов однотипных в базу уходит

Vitaliy
19.07.2018
06:36:25
Так кешируй не запрос а сам результат. Сериализуй коллекции которые вернулись и в редис с каким то таймаутом

ExPandable
19.07.2018
06:36:39
не, редис тут оверхед

Vitaliy
19.07.2018
06:36:59
Та хоть тот же мускуль юзай
Я образно

Александр
19.07.2018
06:37:07
Жадно не грузит?

ExPandable
19.07.2018
06:37:26
то вот так вот оно и грузит

Google

Александр
19.07.2018
06:37:53
Дану
Это в цикле ?

ExPandable
19.07.2018
06:38:14
нет
вас смущает наверное
что characteristicS возвращает hasOne

Vitaliy
19.07.2018
06:38:40
Да кинь ты уже на пастбин свой хезван

Александр
19.07.2018
06:38:42
Не может это n+1 делать

♔ⓜⓐⓡⓓⓞⓝ♔
19.07.2018
06:39:41
Доброе день

ExPandable
19.07.2018
06:39:59
с колонками характеристик

Александр
19.07.2018
06:40:44
Хаха! Отжег)

ExPandable
19.07.2018
06:40:55
ну мне показалось это неплохой идеей...

Vitaliy
19.07.2018
06:41:17

Александр
19.07.2018
06:41:45
Вот характеристики когда выводятся, запросы и дергаются видимо

Aibek
19.07.2018
06:42:12
одно дело просто написать релейшн в модели, другое дело использовать его
Product::query()->with('characteristics')->get();

ExPandable
19.07.2018
06:42:13

Александр
19.07.2018
06:42:29
❗️
Да какой with? Он не может понять, какой релейшн делает запросы)

ExPandable
19.07.2018
06:42:47

Vitaliy
19.07.2018
06:43:06
Он сам написал же какой и скинул его пастбин

Google

Александр
19.07.2018
06:43:36
Потому что то, что он написал, делает 1 запрос
На пастбин лучше бы вставил сам контроллер

Vitaliy
19.07.2018
06:44:20
Он модели без характеристик выбирает, ему виз в выборке нужен оО

Александр
19.07.2018
06:45:22
Надо сначала понять, что у него там в цикле

Aibek
19.07.2018
06:46:07
скинь свой контроллер и view

Vitaliy
19.07.2018
06:46:36
Да, вижу
В выборке ->with(['characteristics'])
Ну

ExPandable
19.07.2018
06:48:35
не, я наврал
погодите
во вьюшке я просто проверяю наличие колонки и вывожу ее в случае чего

Vitaliy
19.07.2018
06:49:20
У тебя ещё и в характеристиках есть релейшины?

ExPandable
19.07.2018
06:49:22
нет
откуда
я же сказал изначально
еще и где то с недели полторы назад тот же вопрос мне задавали

Vitaliy
19.07.2018
06:49:46
Скинь запрос который повторяется

Александр
19.07.2018
06:49:47
Закомменти код во вьюшке - будет запрос в цикле?

ExPandable
19.07.2018
06:49:57

Александр
19.07.2018
06:50:01
Может у него мутатор на геттер с запросом вообще и при сериализации он в каждой характеристике мутирует атрибут с запросом

Google

ExPandable
19.07.2018
06:50:03
бля, короче, вы меня не поняли

Александр
19.07.2018
06:50:17
Фух

ExPandable
19.07.2018
06:50:20
в общем, ладно, сори что отнял ваше время
вы меня не поняли просто)

Vitaliy
19.07.2018
06:50:30
Оо
ну может я из пушки по воробьям конечно
я просто дебаггер открыл и смотрю сколько запросов однотипных в базу уходит

Admin
ERROR: S client not available

ExPandable
19.07.2018
06:50:49
у меня там 80 товаров на главной
каждый тянет ОДИН запрос в базу
следовательно, я хочу чтобы характеристики товара были сразу в кеше
я вас сам чет запутал даже

Александр
19.07.2018
06:53:05
Загрузи все товары и у них жадно характеристики, проблем то

ExPandable
19.07.2018
06:54:59
а, ебаный, я понял откуда там вообще запрос в базу то идет
спасибо еще раз)
а, еще вопрос такой у меня. его вроде задавал уже, но так ответа и не нашел.
запрос есть на получение топРейтед(откуда я собственно и начал копать в оптимизацию)
$topRated = Product::with('characteristics')->whereHas('characteristics', function($q){
$q->where('os', 'Windows')->orderBy('rating');
})->limit(5)->get();
where запрос работает, orderBy игнорируется :(
orderBy если что флоат

Nik
19.07.2018
07:21:00
ты его на саб кверю делаешь

ExPandable
19.07.2018
07:22:16
$topRated = Product::with('characteristics')->whereHas('characteristics', function($q){
$q->where('os', 'Windows');
})->orderBy('rating')->limit(5)->get();
$topRated = Product::with('characteristics')->whereHas('characteristics', function($q){
$q->where('os', 'Windows');
})->orderBy('product_characteristics.rating')->limit(5)->get();
оба таких запроса тоже не работают(

Google

ExPandable
19.07.2018
07:22:43
не может вообще понять что за колонка rating
даже при полном указании откуда она берется

Adel
19.07.2018
07:26:47
а разве не надо тебе ее джойнить?

Nik
19.07.2018
07:26:50
а где она берется?

Adel
19.07.2018
07:26:51
а не whereHas?

ExPandable
19.07.2018
07:27:04
я просто хочу как то более элегантно

Adel
19.07.2018
07:27:31
ты помоему не понимаешь что такое whereHas :)

Nik
19.07.2018
07:27:37
whereHas не умеет сортировки по своей природе. открой сиквел запрос - поймешь почему
именно

ExPandable
19.07.2018
07:27:52
да я понимаю, что сортировка не будет в сабквери работать

Adel
19.07.2018
07:28:07
но там подзапросом

Nik
19.07.2018
07:28:09

ExPandable
19.07.2018
07:28:12
но как мне получившуюся коллекцию отсортировать?

Nik
19.07.2018
07:28:22
открой запрос

Adel
19.07.2018
07:28:26
и в этом подзапросе, который has - там сортировка не важна

Nik
19.07.2018
07:28:28
там exists

Adel
19.07.2018
07:28:36
и колонка rating оттуда никак в главный запрос не попадет