Юра
Мне кажется или тут что-то странное в CsvEncoder симфонийском?
Юра
Юра
а там value по ссылке
Юра
отбой )
Павел
Юра
не мне показалось что $flattened нигде не используется
Кирилл
Юра
на элемент массива
Кирилл
А
Юра
Короче крайне неэффективный энкодер
Юра
Весь датасет пробегает два раза
Null
Ссылка в фориче ваще дурной тон. Для таких целей array walk самое то.
Gleb
Ссылка в фориче ваще дурной тон. Для таких целей array walk самое то.
А почему ссылка в фориче считается дурным тоном? То что в целом явную передачу по ссылке считается что лучше уже не делать?
Передача по ссылке идёт и в самом array_walk.
Foreach только ближе к императивному стилю, а array_walk к функциональному.
По мне для phpшников наверное ближе всё-таки foreach, хотя там и есть подколка с сохраняющейся ссылкой на последний элемент.
Null
Так в нем и дело.
Null
В foreach любят $key => $value.
А потом у тебя дальше снова форич с такими же переменными. А первые были ссылками. И все. Ты случайно меняешь массив.
Gleb
Это обычно до первого применения ссылки в foreach) а дальше снова внимательно читается гугл или дока.)
Null
А вот array_walk такую ошибку не даст сделать)
Gleb
Ну и по хорошему при нормальном именовании переменных, даже в foreach такая ситуация больше исключена)
Gleb
Спасибо, я понял что за сайд-эффект не считается хорошей практикой.
Viktor
Ребят, всем привет!
Может кто-нибудь помочь с составление запроса в Doctrine Query Builder?
Мне нужен супер простой запрос:
select count(*)
from (select city, breed from new_sell_request as nsr group by city, breed) as test;
То есть count из subselect. Что-то в гугле ничего толкого найти не могу(
Заранее спасибо!
Vlad
Viktor
может все такие какие то другие способы есть?:)
Denis
через native sql
Vlad
не мучай себя и делай через чистый скуль
Viktor
Спасибо:) В итоге так и сделал. Там нюанс, что subselect может насыщаться условиями, поэтому на чистом sql не хотел бы писать.
Viktor
$rsm = new ResultSetMappingBuilder($this->getEntityManager());
$rsm->addScalarResult('count', 'cnt');
$subquery = $this->createQueryBuilder('nsr')
->select('nsr.city')
->addSelect('nsr.breed')
->groupBy('nsr.city')
->addGroupBy('nsr.breed');
$subquery = $this->addCitySellRequestsWithBreedersFilter($subquery, $request);
$query = $this->getEntityManager()->createNativeQuery(
'SELECT COUNT(*) FROM (' . $subquery->getQuery()->getSQL() . ') as test1',
$rsm
)->setParameters($subquery->getParameters());
$query->getSingleScalarResult()
Viktor
рабочий вариант)
Кирилл
Viktor
блин, ну не знаю. готов собрать мнения:)
я как-то привык использовать инструмент, если он есть)
есть ли понимание, что мое решение работает хуже / медленнее?
Просто у меня сейчас уже готов отдельный метод, который динамически насыщает этот WHERE. Если полностью перейти на нативку, то придется полностью продублировать этот готовый метод, но без использования QB.
Сергей
я например непонимаю людей, которые используют везде билдер даже где это очень неудобно( типа подзапросы ), потому что он есть.
это не фига не читабельно как минимум)
Сергей
Мы делаем примерно так (очень утрированный пример), билдер в работе практически не используем, проще с чистым SQL работать.
Сергей
В чужих кодах много попадается примерно таких вариантов
Alexey Mishurovskiy
Alexey Mishurovskiy
есть пул запросов, в частности всякие статистики и аггрегаты, где его использовать действительно неудобно..
Alexey Mishurovskiy
Но то что на скринах выше, это какой-то треш.. мы не будем использовать билдер, мы напишем свой билдер на конкатенации со 100500 if-ами
Alexey Mishurovskiy
Юра
Лучше в массив добавлять строки и имплотидь, не надо будет вырезать and or
Юра
Раз уж свой билдер пошел )
The Ant
Denis
Denis
Viktor
Viktor
Но вообще, согласен, естественно.
Просто тут хочется использовать QB, когда запрос динамический, в зависимости от каких-то входных параметров.
Denis
там прям в начале
https://www.doctrine-project.org/projects/doctrine-orm/en/2.13/reference/query-builder.html#the-querybuilder
Viktor
Denis
да там обычно ничего интересного, примеры как пользоваться дальше))))
Юра
Короче если ты ловишь себч на том что тебе приходится конкатенировать строки запроса в зависимости от параметров это индикатор что возможно нужен квери билдер
Юра
А если использовать с ним еще экспрешны то читаемость еще лучше и ошибок сложнее наделать
The Ant
Denis
Denis
Ну да. А в целом, костыль для костыля)))
Павел
Alexey Mishurovskiy
Парни, помогите с логгером
Alexey Mishurovskiy
Вроде стоят исключения, но исключенные каналы все равно сыпятся в логгер
Alexey Mishurovskiy
в мануале нашел вот что :
The channels configuration only works for top-level handlers. Handlers that are nested inside a group, buffer, filter, fingers crossed or other such handler will ignore this configuration and will process every message passed to them.
Alexey Mishurovskiy
я же правильно понимаю, что для каждого канала мне надо сделать finger_crossed handler, настроить и уже из каждого отправлять в logstash?
Сергей
Сергей
там же отдельным полем будет идти канал
Юра
Тебе каналы нало в main добавить получается
Сергей
если вопрос в разделении логов типа
Alexey Mishurovskiy
Сергей
ааа.. а почему не сразу в stdout с нужным каналом + уровнем?
Alexey Mishurovskiy
Сергей
ну для буффера отдельный хендлер есть. фингер кроссед немного же для другого. буфферезирует, чтобы кинуть пачкой, если под уровень подойдет.
то есть главный смысл в том, чтобы в stdout пачкой писать?
Юра
Фингер крос нужен чтобы в случае ошибки дать дебаг инфу перед ошибкой
Сергей
ну да . в его случае , если будет хотя бы info
Юра
Ну да непонятно
Сергей
коорче у меня ощущение, что он тут не нужен
Юра
Чтобы разделить по каналам не нужен фингер крос