goframe 没有其他 orm 的 hasOne,hasMany, belongsTo 等等这样的模型关联。 goframe 说这个对开发者有一定的心智负担。goframe 有 scanList 和 自己的 with。先了解试试用吧。
https://goframe.org/pages/viewpage.action?pageId=1114326
https://goframe.org/pages/viewpage.action?pageId=7297190
之前完成了用户的登录、注册以及个人信息的获取。这个个人信息的获取,只是单表的信息。现在想要用户的其他信息。这个时候,就需要更多的查询。
如果使用 orm,就可以通过 with 就可以搞定的。但是 with 只有定义好了规则才有用。所以,这个时候就需要组合想要的 dao 了。而 dao 是通过 gf gen dao 生的,只要表不变, dao 就不变。重复生也不变,所以就不能去修改 dao。那么只能新文件中来组合了。
因为之前定义 req 和 res 的时候,已经在 model 里边加了一个文件。那么在其中再加一个组合关系就好。
于是,修改 internal/model/admin/user.go,增加以下组合。
type User struct {
entity.Users
UserExtends *entity.UserExtends `orm:"with:user_id=id" json:"user_extends"`
Roles []map[string]interface{} `json:"roles,omitempty"`
Permissions []Permission `json:"permissions,omitempty"`
}
// 用户权限
type Permission struct {
entity.Permissions
Permission []Permission `json:"permission,omitempty"`
}
从组合中可以看到使用 orm 来获取的仅仅是扩展信息。另外的 roles 和 permissions 是另外赋值进去的。
roles 和 permissions 之所以是另外赋值。是因为它们的获取会关联更多的表。不太适合嵌套去处理。
虽然 User 中定义了 with 相关的 UserExtends。 如果调用的时候,没使用 with 也是不会去查询的。其他的两个,如果不赋值也是不会有的。最基础的 Users 依然还是 entity 里的那个 user。
后来还是改了,表名还是用复数吧。所以命令回来生成的 dao 和 model 也是复数。复数就复数吧。
