【问题标题】:How can compare column[option[DateTime] with DateTime.now on a filter of slick 3.0如何在 slick 3.0 的过滤器上将 column[option[DateTime] 与 DateTime.now 进行比较
【发布时间】:2015-07-23 05:08:29
【问题描述】:

我有下一个问题..

我使用 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)
}

然后.. 我需要找到事件的 fechaFin 为 Null 或 fechaFin> DateTime.now... 但问题是 fechaFin 可以为 Null 然后是 Option 值,我无法与 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
    }

【问题讨论】:

    标签: scala datetime slick-3.0


    【解决方案1】:

    我发现这个answer 表明你的实现应该可以工作(至少据我所知),或者你可以尝试

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

    【讨论】:

    • 嗨,Sascha,这不起作用... forall 不是 altasBajas.fechaFin 的成员方法
    • 是的,这就是我说“我不是 Slick 专家”的部分;)。但是,根据link 您的实现或if !altasBajas.fechaFin.isNull || altasBajas.fechaFin &lt; DateTime.now 应该可以工作
    • 问题出在映射器上……现在切换到这个“github.com/tototoshi/slick-joda-mapper”,它就可以工作了!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    相关资源
    最近更新 更多