Думал взять любой query builder для этого, но не понимаю, как хорошо это абстрагировать, и чтобы поля, которые фигурируют в запросе, не торчали своем SQL-виде типа CONCAT(first_name, ‘ ‘, last_name), а были скрыты
CONCAT(first_name, ‘ ‘, last_name) - чистая кастомщина, нет смысла заворачивать это в орм ну предположим у вас есть что то типа алхимии и это будет вида _concat(model.field1, model.field2) а оно вам надо?
Руками берешь и пишешь, никакие билдеры не нужны
gorm
Я делаю сущность "фильтр",типа UserFilter struct { Name string } Дальше метод репозитория принимает этот фильтр и в зависимости от заполненных полей собирает запрос. Тут что с орм, что без него - одинаково - конструируем sql, ничего не абстрагируем. С gorm это как-то так: If filter.Name != "" { bulider = builder.Where("name = ?", filter.Name) } builder.Count... builder.Find... Без gorm суть остаётся той же, Но там разница в том, что все значения плейсхолдеров собираем в слайс []interface, и передаём при запросе единожды при запросе.
я бы взял что-то типа https://github.com/nleof/goyesql
Определились как делать?)
Обсуждают сегодня