如何在slick 3.0的筛选器中比较列[option[DateTime]]和DateTime.now?

3

我有一个问题...

我正在使用spray.http.DateTime,我的映射器是:

  implicit val JavaUtilDateTimeMapper =
    MappedColumnType.base[DateTime, Timestamp] (
      d => new Timestamp(d.clicks),
      d => spray.http.DateTime(d.getTime))


 case class EventosModelTable(
  id: Option[Long],
  idCliente: Option[Long],
  idPlan: Option[Long] = None,
  idServicio: Option[Long] = None,
  tipo: TipoEventos.Value,
  fechaInicio: DateTime,
  fechaFin: Option[DateTime]
) extends BaseModel

class EventosTabla(tag: Tag) extends Table[EventosModelTable](tag, "eventos") with BaseTabla{

  override def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
  def idCliente = column[Long]("id_cliente")
  def idPlan = column[Option[Long]]("id_plan")
  def idServicio = column[Option[Long]]("id_servicio")
  def tipo = column[TipoEventos.Value]("tipo_evento")
  def fechaInicio = column[DateTime]("fecha_inicio")
  def fechaFin = column[Option[DateTime]]("fecha_fin")

  def * = (id.?,idCliente.?,idPlan,idServicio,tipo,fechaInicio,fechaFin) <> (EventosModelTable.tupled, EventosModelTable.unapply _)

  def cliente = foreignKey("cliente",idCliente,TableQuery[ClientesTabla])(_.id)
  def plan = foreignKey("plan",idPlan,TableQuery[PlanesTabla])(_.id)
}

然后..我需要找到日期结束为 Null 或日期结束> DateTime.now 的事件... 但问题在于日期结束可能为空,因为它是一个选项值,我无法与 DateTime.now 进行比较...编译错误是 Some [DateTime] 没有 > 方法。

我会感激任何帮助

查询如下...

def getAltasBajas(id : Long) : DBIOAction[Seq[EventosModelTable],NoStream,Effect.All] = {

      val q = for {
        altasBajas <- tabla.filter(_.idCliente === id)
            if altasBajas.fechaFin.isEmpty || (altasBajas.fechaFin.isDefined && (altasBajas.fechaFin)<(DateTime.now))
      }yield altasBajas

      q.result
    }
1个回答

1
我发现了这个 答案,它表明您的实现应该可以工作(至少在我看来是这样),或者您可以尝试。
val q = for {
  altasBajas <- tabla.filter(_.idCliente === id)
  if !altasBajas.fechaFin.isNull || altasBajas.fechaFin < DateTime.now
} yield altasBajas

嗨Sascha,这个不行... forall不是altasBajas.fechaFin的成员方法。 - Juan Pablo Vittori
是的,那就是我说“我不是Slick专家”的部分;)。然而,根据链接,你的实现或者if !altasBajas.fechaFin.isNull || altasBajas.fechaFin < DateTime.now应该可以工作。 - Sascha Kolberg
1
问题出在映射器上...现在切换到这个"https://github.com/tototoshi/slick-joda-mapper",它可以工作了!非常感谢! - Juan Pablo Vittori

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接