【问题标题】:Create an empty Query in Slick在 Slick 中创建一个空查询
【发布时间】:2018-04-26 15:08:19
【问题描述】:

我有一个站点,我想根据某些条件执行不同的查询,有时会返回一个导致空结果集的查询。

def myQuery(something: Boolean): Query[A, B, Seq] = {
  if(something)
    for {
       x <- table
       y <- othertable
       // ...
    } yield a
   else
     Query.empty
}

但是,Query.empty 的类型为 Query[Unit, Unit, Seq]。导致我不得不写这个:

def myQuery(): Query[A, B, Seq] = {
  if(something)
    for {
       x <- table
       y <- othertable
       // other logic yielding a moderatly complex `A` and `B` 
    } yield b
  else
    for {
      x <- table
      y <- othertable
      // Parts of logic copy pasted
      if false
    } yield b
}

是否有更简单/更清晰的方法来生成正确键入的空Query

【问题讨论】:

    标签: scala slick


    【解决方案1】:

    我建议在这种情况下使用 Option[Query[A,B,Seq]] 作为您的返回类型,但这没有太多上下文。

    (因原答案错误而编辑)

    【讨论】:

      【解决方案2】:

      您可以尝试将您的条件转移到 for 理解本身,例如

      for {
        x <- table
        y <- othertable
        ...
        if something
      } yield b
      

      使用“Hello, Slick”激活器模板:

      val q = for {
        c <- coffees
        if cond
      } yield c
      
      val future = db.run(q.result).map(println)
      Await.result(future, Duration.Inf)
      

      condtrue 时,它会打印

      背景日志: info: Vector((Colombian,101,7.99,0,0), (French_Roast,49,8.99,0,0), (Espresso,150,9.99,0,0), (Colombian_Decaf,101 ,8.99,0,0), (French_Roast_Decaf,49,9.99,0,0))

      false

      后台日志:信息:Vector()

      Coffees 表定义为

      class Coffees(tag: Tag)
        extends Table[(String, Int, Double, Int, Int)](tag, "COFFEES")
      

      q 的类型被正确推断为Query[Coffees, (String, Int, Double, Int, Int), Seq]

      【讨论】:

        【解决方案3】:

        我遇到了类似的问题,并使用take method 解决了它。

        def myQuery(): Query[A, B, Seq] = {
            val query = for {
               x <- table
               y <- othertable
               // other logic yielding a moderatly complex `A` and `B` 
            } yield b
        
            if(something)
                query
            else
                query.take(0)
        

        真的,Query.empty 应该只允许类型参数

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-03-02
          • 2021-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-16
          相关资源
          最近更新 更多