Play20 scalaquery の select ではまったところ | watarunnnのブログ

watarunnnのブログ

watarunnn です

今日はまったところ
scalaquery で first で先頭の結果をもってくると
値がなかったときに exception をはいて残念な気持ちになる。
なので firstOption を使うことにした。
これだと結果がないときは None がかえるので
match で case かいて None のときだけ遷移先を変更した。


package models

import play.api.db._
import play.api.Play.current
import org.scalaquery.ql._
import extended.{ExtendedTable => Table}
import org.scalaquery.ql.TypeMapper._
import org.scalaquery.session._
import org.scalaquery.ql.extended.MySQLDriver.Implicit._

case class Task(id: Long, label: String)

object Tasks extends Table[Task]("Task") {

lazy val database = Database.forDataSource(DB.getDataSource())

def id = column[Long]("id", O AutoInc, O PrimaryKey, O NotNull)
def label = column[String]("label", O NotNull)
def * = id ~ label <>(Task, Task.unapply _)

// 一件取得
def find(id: Long) = database.withSession {
implicit db: Session =>
val q = Tasks.where(_.id is id)
// q.first() // 値がなかった場合は例外が飛ぶ
q.firstOption // 値がなかった場合は None が返る
}

}