Maxim Kainov
Самое важное новшество это объявление полей класса в конструкторе ))
netspike
и не нужно
и никаких пидорских языков )))
Kirill
вот например match выглядит удобно
Как будто свитча было мало)
A.D.🈴
ну или nullable
Можно чуть подробнее?
Aleksandr
https://wiki.php.net/rfc/nullsafe_operator
Юра
В дарте ещё.есть крутая фишка. Чейн оператор
Юра
Юра
Не надо this возвращать
Unreal
Угу, самый сладенький язык Даже Котлин по сахару отстаёт
std::mechanicus
только Enterprise Java, только хардкор
Alexey Mishurovskiy
Всем привет ) у нас тут с коллегой по поводу доктрины спор возник, он говорит, что ему никто из симфонистов не может ответить на вопрос: как вытащить связанную коллекцию из 100+ itemов с N связями за 1+N запросов. Доктрина умеет только 1 + N*100+ или angry load через join и дичайшую деградацию выборки при one-to-many или не дай бог many-to-many
Aleksandr
а почему нельзя сделать обычный запрос, даже если билдер именно так не может?
Alexey Mishurovskiy
а почему нельзя сделать обычный запрос, даже если билдер именно так не может?
ну насколько я понял, что например в Yii это реализовано с помощью with()
Aleksandr
уйй говно
Alexey Mishurovskiy
уйй говно
я в целом согласен, но не очень действует как аргумент
Alexey Mishurovskiy
зы, не пытаюсь развести холивар, в основном претензия к доктрине
std::mechanicus
а давайте холивар разведём
std::mechanicus
а то скучно
Alexey Mishurovskiy
Вот еще Еще кстати к подходу доктрины... А как вы боретесь с дедлоками? частый вопрос... а нахера мне с ними бороться если у меня нет 10к+ rps к БД и они не возникают
Aleksandr
тю, все равно не понимаю, зачем пытаться сделать какие-то сложныне запросы через тот же билдер, когда можно сделать просто запрос?
Слава
А если без шуток, как борятся с этим ?) ( ни раз не работал в проекте где 10к+ рпс )
std::mechanicus
10+к рпс это земля пухом
Alexey Mishurovskiy
у мен на этот вопрос нет ответа
Aleksandr
можно пример сущностей?
Alexey Mishurovskiy
можно пример сущностей?
боюсь что нет, вопрос скорее более теоретический.
Aleksandr
боюсь что нет, вопрос скорее более теоретический.
ну тогда доктрина теоретически может 😂
Aleksandr
ну я никуда не спешу)
Alexey Mishurovskiy
попрошу его накидать примеры
Юра
Доктрина вообще не подходит для высоконагруденных проеков где тысячи запросов в секунду как и пхп в целом
Юра
Хотя есть извраты типо reactphp
Aleksandr
а при чем тут нагрузка и реактпхп?)
Aleksandr
ты с реалтайм по-моему путаешь
Юра
Потому что а хайлоаде надо использовать минимум процессов и максимум эффектиных асинхронных операций
Юра
И избегать гонки за разделяемые ресурсы
Alexey Mishurovskiy
VadimK, [27.11.20 17:51] Ок. Вот сравнительно простой пример: * Список заказов * + Товары one-to-many * + Склады с которых забирать товары many-to-many через товары * + Операторы callcenter которые обзванивали клиентов по заказам (has-one) * + Платежи оп оплаченным заказам коих может быть более 1-го * + платежная система использованная при оплате Alexey Mishurovskiy, [27.11.20 17:52] [In reply to VadimK] напиши еще как в yii это делается и сколько и каких запросов оно сделает VadimK, [27.11.20 17:54] в ларе почти также Order::find() ->with([ 'goods' => static function(ActiveQuery $query) { return $query->with(['warehouse']); }, 'operators', 'payments' => static function(ActiveQuery $query) { return $query->with(['paymentSystem']); } ]) ->all(); VadimK, [27.11.20 17:57] Запросы: * Получить заказы * По уникальным id связей от заказов получить товары * По уникальным id связей от товаров получить склады * По уникальным id связей от заказов получить операторов * аналогично платежи * аналогично платежные системы VadimK, [27.11.20 17:57] итого 6 запросов и 5 предваритиельных пробегов по массивам для сбора связей VadimK, [27.11.20 17:57] нужно лезть под капот, вероятно даже 3 VadimK, [27.11.20 17:58] доктрина сожрет весь выигрышь в случае ручного инжекта релейшенов в отдельном обработчике VadimK, [27.11.20 17:58] убьет БД сделав 501 запрос при ленивой загрузке VadimK, [27.11.20 18:01] и вообще может встрять если попытается выгрузить это одним запросом, потому что мало того что из БД в памяти будет лежать навскидку что-то около 100*70(товаров допустим) * 4 (склада например) * 10 (операторов) * 120 платежей * 4 платежных системы итого получится в памяти нечто дикое: 134400000 записей VadimK, [27.11.20 18:01] возможно что-то сейчас напутал т.к. сам в ахуе VadimK, [27.11.20 18:01] но по логике работы будет нечто такое VadimK, [27.11.20 18:03] да напутал, там иначе считается, цифра будет меньше VadimK, [27.11.20 18:03] но там будут тысячи строк в памяти БД и приложения
Alexey Mishurovskiy
@Cawa87 как то так
Юра
https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/batch-processing.html
Юра
Хотя итерироать энтити с рилейшенами не выйдет
Alexey Mishurovskiy
https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/batch-processing.html
bulk inserts, updates and deletes with Doctrine in an efficient way речь так то про выборку
Юра
А вообще.это попытка натянуть орм туда где он не нужен
Alexey Mishurovskiy
это да, но тем не менее в йии их АР это умеет решать, и я не верю, что доктрина не может это.
Юра
Я не понимаю проблему
Юра
Квери билдер может сделать любой запрос
Юра
Что конкретно доктрина не может сделать?
Alexey Mishurovskiy
он делает эти запросы неэффективно, выше я все написал, но есть шанс, что они поправили это уже, ибо у него опыт был не с самой свежей 2-й доктриной
Aleksandr
так билдер и не используют когда нужны "эффективные" запросы
Aleksandr
что в доктрине, что в ишшной ар
Aleksandr
что в каком-нибудь элокаенте
Юра
select o from Orders o join o.goods g join g.payments p
Юра
Обычный запрос
Юра
А не забыть конечно включить в селект
Юра
select o,g,p
Aleksandr
ну вроде да
Maxim Kainov
Хотя есть извраты типо reactphp
Почему извраты? Можно пхп в режиме демона запускать и экономить на инициализации
Юра
А как демон будет запросы обрабатывать
Юра
Ты про какой демон говоришь?
Юра
Я вот про это
Юра
Юра
Поэтому я и говорил про reactphp
Maxim Kainov
Ты про какой демон говоришь?
Там разные варианты есть, в бенчах симфони со свулем запускают
Юра
И оно не течет?
Maxim Kainov
https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=fortune
Юра
И шо оно тестит
Maxim Kainov
И шо оно тестит
Там же все написано
Юра
Сколько параллельных потоков?
Юра
Как тестили?
Юра
Не вижу инфы
Maxim Kainov
Хз, должно быть где то