Как использовать условия в командах обновления / удаления с Hanami::Repository?
Не могу понять, как обновлять / удалять записи по условиям с Hanami::Repository.
Например, есть эти таблицы: users
а также clients
, Пользователи имеют:
deleted_at
колонка, для пометки пользователя как удаленногоclient_id
столбец, как внешний ключ наclients
Таблица
Как я могу обновить пользователя по id
, только если запись не помечена как удаленная, а определена областью действия конкретного клиента?
Вот псевдокод:
Users
.joins(:clients)
.where('clients.id = ?', client_id)
.where(deleted_at: nil)
.update(new_attributes)
2 ответа
Я думаю, что это должно работать для вашего случая
UserRepository.new.users
.where(id: user_id, deleted_at: nil, client_id: client_id)
.update(attributes)
Версии драгоценных камней:
Ханами-модель (1.3)
стр. (1.1.4)
Просто расширим ответ we138:
Hanami использует ROM и Sequel для своих репозиториев.
Если у вас есть какие-либо сомнения относительно того, как добавить фильтры для ваших запросов, вы всегда можете проверить документацию для репозиториев Hanami и для этих драгоценных камней.
Используя репозиторий hanami, вы можете сделать это обновление, как описано в we138:
UserRepository.new.users
.where(id: user_id, deleted_at: nil, client_id: client_id)
.update(attributes)
И это вернет вам количество затронутых строк.
Если вы хотите обновить запись, используя ваши фильтры и вернуть затронутые строки, вы можете использовать продолжение непосредственно:
Sequel::Model.db[:users]
.where(id: user_id, deleted_at: nil, client_id: client_id)
.returning
.update(attributes)
Вы можете найти больше информации о том, как фильтровать запросы, используя ROM и Sequel, по следующим ссылкам:
https://rom-rb.org/4.0/learn/sql/queries/ https://sequel.jeremyevans.net/rdoc/files/doc/dataset_filtering_rdoc.html