Как использовать условия в командах обновления / удаления с 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

Другие вопросы по тегам