而不是
q1.update(firstName.getOrElse(q1.list().head))
你可以写作
firstName.foreach{ fn => q1.update(fn) }
它更短、更简单,是一个而不是两个查询:)。
使用
foreach
在…上
Option
当你把它看作是一个有一个或零个元素的集合时,它就不再显得奇怪了。
关于获取整个对象、修改并保存回的想法,您可以这样做:
def updateContact(id: Int, firstName: Option[String], lastName:Option[String], ...): Unit = {
val q1 = Query(Contacts).filter(_.id === id)
val c = q1.first
val modifiedC = c.copy(
firstName = firstName.getOrElse(c.firstName),
lastName = lastName.getOrElse(c.lastName),
...
)
q1.update(modifiedC)
}
下面是另一个例子:
http://sysgears.com/notes/how-to-update-entire-database-record-using-slick/
这是一种干净简单的方法,如果性能不是关键任务,这可能是最好的方法,因为它总是传输
Contacts
。您可以通过仅传输选定的列来节省一些流量。