Slick 3.0.3中的case类过滤条件

时间:2015-10-08 15:50:54

标签: scala design-patterns repository-pattern slick slick-3.0

我有一个模型,相应的表和一个存储库。在我的存储库中,使用TableQuery我想基于某些条件(从模型到布尔的函数)找到模型对象,存储库无法控制,它作为参数注入。 E.g。

case class JournalEntryModel(id: Option[Long] = None, isDebit: Boolean, principal: Double)

class JournalEntryTable(tag: Tag) extends Table[JournalEntryModel](tag, "journal_entries") {

   def id = column[Long]("id", O.PrimaryKey, O.AutoInc)

   def isDebit = column[Boolean]("is_debit")  

   def principal = column[Double]("principal")

   def * = (id.?, isDebit, principal) <>
      (JournalEntryModel.tupled, JournalEntryModel.unapply)
}

object journalEntries extends TableQuery(new JournalEntryTable(_))

object Repository {

    def find(criteria: JournalEntryModel => Boolean): List[JournalEntryModel] = db.run {
         journalEntries.filter(je => criteria(je)).result            
    } toList
}

val credits = Repository.find(!_.isDebit && _.principal > 500.0)

如何编写这样的过滤函数?

1 个答案:

答案 0 :(得分:-1)

我认为你的问题是&#34;如何为JournalEntryModel => Boolean&#34;写一个函数文字?

如果你想用你的文字来做,你需要定义你的参数:

// Parameter list ("model" here) is required. You also need the argument type(s).
// Here, they're inferred from the argument to "find".
val credits = Repository.find(model => !model.isDebit && model.principal > 500.0)