Not on Slick, in the lovely ScalaQuery stone ages here, but you should be able to use what was called a MutatingUnitInvoker to modify DB row in place (i.e. perform a single query).

Something like:

val q = for{id <- Parameters[Int]; t <- Things if is id} yield t
def incrementLikeCount(thingId: Int)(implicit session: Session) = {
  q(thingId).mutate(r=> r.row.copy(like_count = r.row.like_count + 1))

Performance should be acceptible, prepared statement generated once at compile time and a single query against the database. Not sure how you can improve on that in a type safe manner with what Slick currently has on offer.

Related Query

More Query from same tag