首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用可选值的幻影更新模型

使用可选值的幻影更新模型
EN

Stack Overflow用户
提问于 2016-09-15 10:56:58
回答 1查看 281关注 0票数 1

我在我的模型上有一个update方法,它接受一个带有option类型的类,我想构造一个update语句,其中包含一个动态集,这取决于哪些字段具有值。使用Phanton-DSL1.5,我得到了类似这样的东西;

代码语言:javascript
复制
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()处理它是很困难的。

任何关于如何处理这个问题的建议都会很有帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-16 04:26:54

使用setIfDefined可以做到这一点,而且不需要包装任何东西。

代码语言:javascript
复制
db.table.update.where(_.bla eqs bla)
  .modify(_.x setIfDefined None)
  .and(_.y setIfDefined Some("text")

这基本上会忽略所有属于None的内容,并且会强制它们不会显示在查询中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39502463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档