Спасибо за ваши мнения. Мы делаем так: отдельный *.sql файл

с запросами, каждый запрос находится между двумя комментариями

-- :sql_query_name
ЗАПРОС
-- sql_query_name:

И далее в коде вызываем этот запрос так:
db:run(sql_query_name, #{placeholder_name => placeholder_value})

Плейсхолдеры двух типов:
1. :key - безопасная подстановка
2. _key - вставляется в строку, подходит для указания сортировки, схемы и т д.

Пример на скрине, на сам запрос не смотрите))

По-моему, так проще, потому что код на разных языках в разных файлах, а не в перемешку. Я могу такие *.sql кидать человеку у которого нет IDE с моим языком.

В query builder мы теряем подсветку, сложно запрос скопировать сразу в CLI и, если нужно отдать на аутсорс DBA, то придётся передавать код программы.

Поэтому я не могу понять, почему вы говорите, что query builder удобнее, особенно в поддержке. Вроде, это очень похоже на времена, когда HTML перемешивали с PHP.
Или реально это так удобно?

6 ответов

17 просмотров

qb лишь формирует запрос и набор placeholder вместо выполнения такого запроса можно попросить вернуть строку и значения плейсхолдеров пример где qb предпочтительней я выше привел, но опять же это дело вкуса, попробуй написать на своем диалекте формирование запроса SELECT * FROM table WHERE column4 > 100 and column5 in (3, 7) ORDER BY column1 ASC, column2 DESC все познается в сравнение, конечно же qb не панацея и по возможности надо писать понятно, но это пример где обычный подход не очень при условии что вся фильтрация и сортировка она динамическая по всем 5 колонкам и сортировка тоже

Ivanov- Автор вопроса
Evgeniy Kuvshinov
qb лишь формирует запрос и набор placeholder вмес...

Это понятно, но ради фасетного поиска тащить и применять везде query builder - странно. Я просто представил, насколько раздута кодовая база с query builder и не могу понять плюсы применения. С query builder в проекте: 1. Перемешан SQL и код. 2. Раздута кодовая база. 3. Нельзя взять из лога базы запрос и грепнуть код чтобы найти этот запрос. 4. Передача запросов другим разработчикам и в другие программы (например, для explain) не тривиальная задача. 5. Риск, что с новой версией библиотеки для qb у нас что-то поломается. И плюсы: 1. Мы можем делать примитивный фасетный поиск.

Ivanov
Это понятно, но ради фасетного поиска тащить и при...

1/2 - и без qb перемешается когда будешь собирать запрос 3/4 Можно вытащить из qb запрос, в базе так же будет запрос, грепай сколько угодно 5. Ваши запросы без qb поломаются с той же вероятностью

Ivanov
Это понятно, но ради фасетного поиска тащить и при...

я не говорю что везде надо тащить qb :) это некий компромисс есть места где он необходим, но таких мест обычно не так много большая часть мест это обычный sql с плейсхолдерами 1. в qb не должно быть возможности писать sql, всякие raw это костыли в qb 2. зависит от qb 3. перед отправкой никто не мешает залогировать запрос в приложение $qb->getQuery() и $qb->bindings() qb это посути абстракция чтобы формировать строку с sql и биндинги для нее 4. смотри пункт 3 вполне тривиальна 5. qb покрывает базовый функционал и далеко не весь sql ansi и не может быть его заменой 1. фассетный поиск это основное место где оно допустимо, ну или вставка или апдейт или удаление, в остальном надо делать обычные запросы с биндингами нет серебрянной пули которая решит все проблемы, надо использовать инструменты под задачи нельзя сказать что qb это плохо всегда, также как нельзя сказать что qb это хорошо и удобно всегда, надо выбирать инструмент под задачу.

Ivanov- Автор вопроса
Evgeniy Kuvshinov
я не говорю что везде надо тащить qb :) это некий ...

Спасибо большое за развёрнутый ответ. Мне показалось, что многие считают что query builder удобно везде использовать, но ваша точка зрения прояснила ситуацию и я не могу не согласиться. Немного только дополню свой предыдущий комментарий: 1. Про перемешку SQL и кода программы я имел ввиду, что query builder - это слой SQL, так как когда нужно поменять итоговый запрос, править нужно код. 2. Про раздутую кодовую базу - любое составление запроса, даже самого простого, будет длиннее, чем вызов этого запроса по идентификатору. 3. Логирование запроса для грепа - мы получим запрос в логе, а не в коде и нельзя будет грепнуть *.php файлы чтобы понять в каком месте составлен запрос. Или с мобильного телефона найти место с запросом через интерфейс гитхаба.

Ivanov- Автор вопроса
Xeon Null
1/2 - и без qb перемешается когда будешь собирать ...

1/2 - зачем мне собирать запрос? 3/4 - можно будет грепать код программы и найти нужное место? Это как? 5 - из-за чего запросы поломаются?

Похожие вопросы

Обсуждают сегодня

Только сейчас дошли руки до Orange pi 5. Это нормально что на нем YOLOv5s выдает 1 кадр раз в 2-3 секунды на CPU? Это без оптимизаций и прочих настроек, просто голый запуск че...
Denis
10
Всем привет! подскажите пожалуйста как можно увеличить качество фото?
Evgeniy
19
Доброе утро. Подскажите, если если 4 корутины, внутри которых VideoCapture, то будут ли они работать асинхронно? Т.к. нагуглил, что Videocapture в моменте может быть открыт то...
Alexander👨‍💻
19
Я пожалуй ещё раз брошу клич: кто-нибудь хочет в рабство в ОЭЗ Алабугу на позицию инженера CV? Работы много, задачи сложные, ЗП высокая. Я передам контакт напрямую в HR.
Maxim 👀 Osminin #Slowpoke3D
13
Could you upvote please? https://www.kaggle.com/code/mehmetisik/sentiment-analysis-twitter-nlp-machine-learning https://www.kaggle.com/code/mehmetisik/user-based-collaborati...
MHT Mht
1
I have this grayscale image in opencv I want to change gray quadrilaterals to black like others It means i want to change gray color of specific color to black How can i do th...
@. .@
7
А вы в атоме работаете да?
Alexander x*❄️❅❆
11
всем драсте, занимаемся активно макетами печатной продукции каждый раз при закае нам шлют pdf или ai, любой вектор кароч чтоб внести заказ нужно каждый раз вручную создавать ...
Vlados
4
Добрый день. Созданию отношения таблиц для учёта кораблей, их движения между точками (портами) согласно расписания. Терзают сомнения в правильном ли направлении двигаюсь 😅 1...
Aleksey
1
А ещё представьте, что испытывает бычок когда из него вытаскивают крючок, его же без жабер не вытащить. Не жалко? Или только человеков жалко? У меня вот жалко видимо ещё не вы...
Maxim 👀 Osminin #Slowpoke3D
3
Карта сайта