Mic*_*out 16 scala scalaquery slick
我正在尝试使用Scala Slick 1.0.1过滤可选的日期列.
可能我只是看不到它,但我有一个看起来像这样的表:
case class UserRole(id:UUID, userID:UUID, role:String)
object UserRole extends Table[UserRole]("User_Role") {
//(id: Long = 0l, name: String, active: Boolean) extends KeyedEntity[Long] {
def id = column[UUID]("ID", O.PrimaryKey)
def userID = column[UUID]("user_id")
def vendorID = column[UUID]("vendor_id")
def role = column[String]("role")
def user = foreignKey("user_FK", userID, User)(_.id)
def start = column[java.sql.Date]("startDate")
def endDate = column[Option[java.sql.Date]]("endDate")
def * = id ~ userID ~ role <> (UserRole.apply _, UserRole.unapply _)
}
Run Code Online (Sandbox Code Playgroud)
你会看到endDate是可选的.
如何构造一个我过滤的查询,以便endDate可以是NULL/None还是大于当前(db)日期?仅供参考,我通常使用嵌入式API
谢谢
cmb*_*ter 11
这不是很好(关于部分null.asInstanceOf),但我认为它会起作用.我从一个旧的Scala查询帖子中得到了这个想法,所以我不知道是否光滑的东西为此做了更好的东西,但是当我查看selectStatement查询得到的结果时,它看起来是正确的:
val now = new java.sql.Date(System.currentTimeMillis())
val query = for {
role <- UserRole
if (role.endDate === null.asInstanceOf[Option[java.sql.Date]] || role.endDate > now)
} yield role
Run Code Online (Sandbox Code Playgroud)
编辑
感谢@MartinKolinek的评论,这段代码也可以工作,更清晰,可能是更好的做事方式:
val now = new java.sql.Date(System.currentTimeMillis())
val query = for {
role <- UserRole
if (role.endDate.isNull || role.endDate > now)
} yield role
Run Code Online (Sandbox Code Playgroud)