我在我的模型上有一个update方法,它接受一个带有option类型的类,我想构造一个update语句,其中包含一个动态集,这取决于哪些字段具有值。使用Phanton-DSL1.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()处理它是很困难的。
任何关于如何处理这个问题的建议都会很有帮助。
发布于 2016-09-16 04:26:54
使用setIfDefined可以做到这一点,而且不需要包装任何东西。
db.table.update.where(_.bla eqs bla)
.modify(_.x setIfDefined None)
.and(_.y setIfDefined Some("text")这基本上会忽略所有属于None的内容,并且会强制它们不会显示在查询中。
https://stackoverflow.com/questions/39502463
复制相似问题