簡體   English   中英

帶有可選值的幻像更新模型

[英]Phantom update model with Optional values

我的模型上有一個update方法,該方法采用帶有選項類型的類,並且我想構造一個更新語句,該語句包括一個動態SET,具體取決於哪些字段具有值。 使用Phanton-dsl 1.5我有類似的東西。

import com.websudos.phantom.query.{ AssignmentsQuery => AQ }

override def updateModel(m: Upd)(implicit ec: EC): Future[Unit] = {
    if (m.isEmpty) return Future.successful(())
    val upd = update
    upd.where(_.user_id eqs m.user_id)
    val mod: AQ[CTable, Val] = new AQ(this, upd.qb.`with`())
    for (first_name <- m.first_name) mod.and(_.first_name setTo first_name)
    for (last_name <- m.last_name) mod.and(_.last_name setTo last_name)
    mod.future.map(_ => ())
}

現在,我嘗試使用Phantom-dsl(1.27)的最新版本,並且僅使用dsl進行等效操作時遇到了麻煩。 由於任何字段都可能為None,因此構造第一個Modify(),然后使用任意數量的and()進行處理,事實證明是困難的。

關於如何處理此問題的任何建議都將有所幫助。

使用setIfDefined可以做到這一點,而您不需要包裝任何東西。

db.table.update.where(_.bla eqs bla)
  .modify(_.x setIfDefined None)
  .and(_.y setIfDefined Some("text")

這將基本上忽略所有為None的事物,並將迫使它們不顯示在查詢中。

暫無
暫無

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

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