1

不知道如何使用 Hanami::Repository 按条件更新/删除记录。

例如,有这些表:usersclients。用户有:

  • deleted_at列,用于将用户标记为已删除
  • client_id列,作为clients表上的外键

id仅当记录未标记为已删除且由特定客户端限定时,如何通过 更新用户?

这是伪代码:

Users
  .joins(:clients)
  .where('clients.id = ?', client_id)
  .where(deleted_at: nil)
  .update(new_attributes)
4

2 回答 2

2

我认为它应该适用于您的情况

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

宝石版本:

花见模型 (1.3)

pg (1.1.4)

于 2019-02-19T14:43:41.767 回答
0

只是扩展we138的答案: Hanami在其存储库的
底层使用ROMSequel 。
如果您对如何为查询添加过滤器有任何疑问,您可以随时查看Hanami repositories和这些 gem 的文档。

使用 hanami 存储库,您可以按照we138的描述进行此更新:

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

这将返回您受影响的行数。
如果您希望使用过滤器更新条目并返回受影响的行,您可以直接使用 sequel:

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

于 2019-02-21T14:33:39.203 回答