Как использовать условия в командах обновления / удаления с Hanami :: Repository? - PullRequest
0 голосов
/ 15 февраля 2019

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

0 голосов
/ 21 февраля 2019

Просто подробно остановимся на ответе we138 :
Ханами использует 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 / query / https://sequel.jeremyevans.net/rdoc/files/doc/dataset_filtering_rdoc.html

0 голосов
/ 19 февраля 2019

Я думаю, что это должно работать для вашего случая

UserRepository.new.users
  .where(id: user_id, deleted_at: nil, client_id: client_id)
  .update(attributes)

версии драгоценных камней:

hanami-model (1.3)

pg (1.1.4)

...