Павел
Юра
Все хватит
Юра
Не конструктивно
Михаил
Не конструктивно
Эх, меч конструктивности затачивается в уличных полемиках.
Михаил
@dexplon извиняюсь если где-то перешёл на личности или просто перегнул. Это просто спор о тестах, ничего более.
Павел
Алексей
Коллеги, подскажите как с помощью QueryBuilder выбрать записи с ManyToMany связью, отсутствующие в связанной таблице
Михаил
Через подзапрос собрать idшники и дальше сджоинить основные записи по этому подзапросу а не по связной таблицы
Михаил
Алексей
сущности A у которых A.entityB === null
Михаил
SELECT A
LEFT JOIN pivot_table as pt
WHERE pt.b_id is null
? так чтоль?
Михаил
Короче смысл в том что при left join там где отсутствует связь в пивот таблице на месте b_id будет null и вот тут мы их и ловим
Михаил
НО я хз как в квери билдере избавится от дублей A
Алексей
$this->createQueryBuilder('t1')
->join('t1.table2', 't2')
->where('t2 = null')
->getQuery()
->getResult();
Алексей
типа такого надо
Павел
Павел
Ну и is null скорее всего
Алексей
ну да ессно is null
Павел
Павел
Или тупо из-за кол-ва строк будет выше IO?
Павел
Просто если группируем - то это оверхэд по конкатинации, так как делиметеры
Павел
Ну я так, не шарю, чисто рассуждаю
Михаил
А вообще если вам грозят сложные запросы и вы знаете как сделать это чистым sql но не хотите мучится с qb то вот чит который я открыл для себя
https://habr.com/ru/articles/496166/
Михаил
Короче ResultSetMappingBuilder
Михаил
можно написать сложные, вложенные запросы без головняка, а уже потом переписать на qb
Павел
Павел
Видимо у меня и осталось в памяти что гемор
Павел
Павел
Не рокет сайнс конечно, соглашусь
Павел
Видимо как раз билдер это решает, в нем уже как то поменьше кода
Алексей
Михаил
Ну я так, не шарю, чисто рассуждаю
там да, я тоже хз как доктрина поведёт себя если в неё кучу одинаковых записей пихать. Ни будет ли она десериализовывать их каждый раз.
Короче да, сначала наверное лучше забрать DISTINCT или GROUP BY id шники а уже по ним вытащить записи.
У меня на проекте просто могут в сущностях и json лежать и вот при таких LEFT JOIN реально может быть большой IO
Девопсы наказывают за это
Павел
Павел
Т.е. когда мы на уровне sql в одном запросе схлопавыаем группу и строим json или строку с множеством записей, чтобы на уровне пыхи не мержить дубли
Алексей
Михаил
Короче ладно, я сейчас попробовал расписать все ЗА и ПРОТИВ при написании теста на вот такую логику. Это просто мысли, а не моё мнение которому я следую:
{
$entity= $this->repository->get()
$this->calculator->action($entity)
$this->em->flush()
}
1) Юнит тест НУЖЕН, если вы работаете по методологии которая говорит что "Юнит/Строчка кода не должна быть написана, пока на неё нет отдельного падающего теста".
2) Юнит тест НУЖЕН, так как СЕЙЧАС нет комбинаторики, но ПОТОМ она может появится и хорошо, если бы на это был бы падающий тест. Если упал юнит тест, но не упал функциональный - это должен быть триггер к изменению функционального (приёмочного) теста. (тест как сигнализация к изменениям)
3) Юнит тест НЕ НУЖЕН так как то, что он тестирует является частью другого теста (redundant test).
4) Юнит тест НЕ НУЖЕН так как в тестируемом коде нет никакой сложной логики.
5) Юнит тест НЕ НУЖЕН так как есть мнение что если "Если тест сложный, значит тестируемый код плохо написан". Возможно имеет место и обратная логика "Если тест СЛИШКОМ простой, то от класса/метода нужно избавиться".
Юра
Я уже говорил что невозможно написать код который бы не нарушал какое-то из существующих правид
Юра
Поэтому нужно следовать рамкам здравого смысла
Юра
Не стоит слепо доказывать кому-то что только так и не иначе
Юра
Там столько всего уже придумали умные зануды что оно все одно другому противоречит
Юра
Как мне сказал один умный дядька на работе, лучше не идеальный код который уже в продакшене, чем идеальный но которого ещё нет
Юра
Бизнесу вообще пофигу на то что там под капотом. На практике если ты сделал быстро но появился баг бизнес поймет и скажет ок нужно исправить. А вот если ничего нету и сроки срываются, то бизнес будет очень недоволен
Юра
Не везде конечно это так, есть сферы где нужно долго и без багов, зависит короче от бизнесов
Михаил
нормально делай - нормально будет
https://www.youtube.com/watch?v=RGXNgXj9t4M
Михаил
Юра
Я рассматриваю контроллеры как слой транспорта. Это чисто прием сообщений, кодирование сообщений, возможно авторизации. Но логика вся по идее должна быть дальше передана сервису который ничего не знает про хттп. Логично что в твоём случае три роута это просто прокси в один сервис который уже внутри себя там добавляет комментарии куда нужно
Dmitry
всем привет а symfony messenger умеет в rpc rabbitmq?
Aleksandr
Вадим
привет!
подскажите как в апи платформе красиво сообщать юзеру о том что сущность нельзя удалить из-за форейн кей?
Михаил
Михаил
А вообще у тебя есть 3 варианта
1) упасть с 500, так как это явно похоже на попытку сделать то, что системой не расчитывалось
2) если расчитывалось то или каскадное удаление
3) или soft delete
Павел
Вадим
оно само падает с 500, фронт не доволен
Михаил
Вадим
Вадим
Михаил
Это сокращённое от «пускай»
Вадим
Михаил
Фронт является источником контрактов.
Как он скажет так и делай
Вадим
ты хотел наверное сказать что знаешь где перехватить доктриновский эксепшон?
Михаил
Твоя задача нормально закодировать бизнес логику
Михаил
Их задача дать тебе контракт
Вадим
Вадим
Павел
Вадим
проверено много раз
Вадим
Павел