簡體   English   中英

如何使用 Hanami::Repository 在更新/刪除命令中使用條件?

[英]How to use conditions in update/delete commands with Hanami::Repository?

無法弄清楚如何使用 Hanami::Repository 按條件更新/刪除記錄。

例如,有這些表: usersclients 用戶有:

  • deleted_at列,用於將用戶標記為已刪除
  • client_id列,作為clients表上的外鍵

僅當記錄未標記為已刪除且由特定客戶端限定范圍時,如何才能通過id更新用戶?

這是偽代碼:

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

我認為它應該適用於您的情況

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

寶石版本:

賞花模型 (1.3)

頁 (1.1.4)

只是擴展了we138的回答:
Hanami 在其存儲庫下使用ROMSequel
如果您對如何為查詢添加過濾器有任何疑問,您可以隨時查看Hanami 存儲庫和這些 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM