我已经从PHP ORM(Laravel Eloquent)转向Scala。而且我发现与Eloquent最相似的是Skinny ORM。 使用它创建简单的CRUD应用程序后,我发现了如何使用软删除获取删除的记录的问题?
我还检查了Skinny ORM中的代码,似乎他们不支持它,不确定我是否找不到它或者他们真的不支持它。
答案 0 :(得分:0)
最后,我实现了删除自己。 这是我做的特质:
trait SoftDelete[Entity] extends CRUDFeatureWithId[Long, Entity] {
/**
* deleted_at timestamp field name.
*/
def deletedAtFieldName = "deletedAt"
var withDeletion = false;
def withDeleted = {
withDeletion = true
this
}
override def defaultScopeForUpdateOperations: Option[SQLSyntax] = {
val c = defaultAlias.support.column
val scope = sqls.isNull(c.field(deletedAtFieldName))
if(withDeletion)
super.defaultScopeForUpdateOperations
else
super.defaultScopeForUpdateOperations.map(_.and.append(scope)) orElse Some(scope)
}
override def defaultScope(alias: Alias[Entity]): Option[SQLSyntax] = {
val scope = sqls.isNull(alias.field(deletedAtFieldName))
if(withDeletion)
super.defaultScope(alias)
else
super.defaultScope(alias).map(_.and.append(scope)) orElse Some(scope)
}
override def deleteBy(where: SQLSyntax)(implicit s: DBSession = autoSession): Int = {
updateBy(where).withNamedValues(column.field(deletedAtFieldName) -> DateTime.now)
}
}
我们可以像这样调用模型:
User.withDeleted.findAll
不确定这是否是最好的方法,因为我无法直接在库中编辑