如何在Hanami :: Repository中使用更新/删除命令中的条件?

时间:2019-02-15 19:12:33

标签: hanami hanami-model

无法弄清楚如何使用Hanami :: Repository根据条件更新/删除记录。

例如,有以下表:tsconfig.json{ ... (other configs) "compilerOptions": { "lib": [ "es2017", "dom" ], "target": "es5" } ... (other configs) } 。 用户具有:

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

仅当记录未标记为已删除并由特定客户端确定范围时,如何才能通过client_id更新用户?

这是伪代码:

clients

2 个答案:

答案 0 :(得分:1)

我认为这应该适合您的情况

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

gem版本:

  

hanami模型(1.3)

     

pg(1.1.4)

答案 1 :(得分: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::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