我正在尝试使用 Go 从作为现有 Rails 应用程序一部分的数据库中读取数据。一些模型和表通过type列使用单表继承。在 Rails/ActiveRecord 中,此列的存在将创建到适当模型的自动映射。如果表是animals并且type是Dog,它将映射到Dog类;如果是Cat,它将映射到Cat类。我想在 Gorm 中设置类似的东西。
由于看起来 Gorm 没有default_scope模型选项,我使用了一个新的回调。
func scopedSearch(scope *gorm.Scope) {
tablename := scope.TableName()
switch tablename {
case "table_using_sti":
scope.Search.Where("type = ?", "MyModelName")
default:
return
}
}
Run Code Online (Sandbox Code Playgroud)
然后我在我的main函数中注册回调:
db.Callback().Query().Before("gorm:query").Register("my_plugin:before_query", scopedSearch)
Run Code Online (Sandbox Code Playgroud)
当我搜索使用的实例db.First或使用的模型时db.Model(&MyModel{}).Where(...),它似乎正在工作。这是处理它的正确方法吗?所有查询方法都会遵守此范围还是有更直接或更彻底的方法?
| 归档时间: |
|
| 查看次数: |
695 次 |
| 最近记录: |