2017-08-03 20 views
2

我试图与光滑,其中的参数之一就是查询返回(通常你通过参数传递给“取”做到这一点)的元素数量的查询。不过,我想这个参数是可选的(寻找像.maybeFilter的命令,但对。取),我一直在到处找,但似乎无法找到它。有没有人有什么建议?Slick是否有采取动态查询大小的方法?

回答

0

我建议你捕捉想要运行的主查询,然后使用常规方法Option应用take。喜欢的东西:

def query(taking: Option[Int]) = { 
    val baseQuery = table.filter(...).map(...) 
    taking.map(size => baseQuery.take(size)) getOrElse baseQuery 
} 

如果你这样做了很多,这可能是有意义的包裹行为纳入自己的类,如MaybeFilter

0

动态查询滤波器 slick-doc

1。第一方式(所有动态滤波器是 '和')

def selectByHotelIdAndStartTimeAndEndTimeAndPerpageAndOffset(
     hotelId: Option[String], 
     caseTimeFilter: Option[CaseTimeFilter[Timestamp]], 
     perPage: Int, 
     offset: Int 
): Future[Seq[GoodsOrderMstinfoTRow]] = 
    db.run(
     tableQ 
     .filter { goodsOrderMstinfoT: GoodsOrderMstinfoT => 
      List(
      hotelId.map(goodsOrderMstinfoT.hotelid === _), 
      caseTimeFilter.map(t => goodsOrderMstinfoT.createTime between (t.start, t.end)) 
     ).collect({ case Some(repBoolean) => repBoolean }) 
      .reduceLeftOption(_ && _) 
      .getOrElse(true: Rep[Boolean]) 
     } 
     .drop(offset) 
     .take(perPage) 
     .sortBy(_.gomtId.desc) 
     .result 
    ) 

2.second方式

def selectCountByHotelIdAndStartTimeAndEndTime(
     optionHotelId: Option[String], 
     rmiSerialno: Option[String], 
     caseTimeFilter: Option[CaseTimeFilter[Timestamp]] 
): Future[Int] = 
    db.run(
     tableQ 
     .filter { RoomReviewT: RoomReviewT => 
      optionHotelId match { 
      case Some(hotelid) => RoomReviewT.hotelid === hotelid 
      case None   => true: Rep[Boolean] 
      } 
     } 
     .filter { RoomReviewT: RoomReviewT => 
      rmiSerialno match { 
      case Some(rmiSerialNo) => RoomReviewT.rmiSerialno === rmiSerialNo 
      case None    => true: Rep[Boolean] 
      } 
     } 
     .filter { RoomReviewT: RoomReviewT => 
      caseTimeFilter match { 
      case Some(timeFilter) => 
       RoomReviewT.createTime between (timeFilter.start, timeFilter.end) 
      case None => true: Rep[Boolean] 
      } 
     } 
     .length 
     .result 
    ) 

`

相关问题