我有一个模型,相应的表和一个存储库。在我的存储库中,使用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)
如何编写这样的过滤函数?
答案 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)