代码之家  ›  专栏  ›  技术社区  ›  Shing

如何在phantom dsl中更新一行中的多个字段?

  •  3
  • Shing  · 技术社区  · 8 年前

    我正在使用Phantom 1.26.6。

    // id is the primary key
    case class Motorcycle(id:String, model:String, made:String, capacity:Int)
    

    举一个摩托车的例子,它已经存在于卡桑德拉,我会 喜欢更新型号、制造、容量的价值。

    // The following does not compile.
     update.where(_.id.eqs(bike.id)).modify(_.model.setTo(bike.model))
     .modify(_.make.setTo(bike.make))
     .modify(_.capacity.setTo(bike.capacity))
    
    
     // The following works.   
     val updateQuery = update.where(_.id.eqs(bike.id))
    
     for {
        _ <- updateQuery.modify(_.model.setTo(bike.model)).future()
        _ <- updateQuery.modify(_.make.setTo(bike.made)).future()
        result <- updateQuery.modify(_.capacity.setTo(bike.capacity)).future()
      } yield (result)
    

    我想知道是否有更好的方法来更新多个字段。

    1 回复  |  直到 8 年前
        1
  •  5
  •   flavian    8 年前

    你所要做的就是使用 and 运算符链接多个更新语句。这将在单个查询中执行所有内容。

     val updateQuery = update.where(_.id eqs bike.id)
       .modify(_model setTo bike.model)
       .and(_.make setTo bike.made)
       .and(_.capacity setTo bike.capacity)
       .future()