在做一个老项目迁移,从PHP迁移到Golang,于是不得不一边迁移一边深入的了解老系,发现老系统有很多奇葩的设计,今天说说其中一个,以及给我带来的困扰和解决方案。
有三张表
1.用户表(user)
| 关键字段 | 说明 |
| uid | 自增主键 |
| username | 用户名 |
| … | 其他字段 |
2.文章表(blog)
| 关键字段 | 说明 |
| gid | 自增主键 |
| sortid | 分类id |
| author | 文章id |
| title | 文章标题 |
| … | 其他字段 |
3.分类表(sort)
| 关键字段 | 说明 |
| sid | 分类id |
| sortname | 分类名称 |
| … | 其他字段 |
golang的gin、beego,PHP的Yii、Laravel等框架,都是可以自动关联的,可是他们默认的关联条件是主表的id字段以及子表中的主表表名拼上“_id”,于是上面的表结构就很坑爹了,研究了好一会,新手伤不起啊。
关联部分这样写,完美解决:
type Blog struct {
Gid int64 `json:"gid",gorm:"primary_key;auto_increment"`
Title string `json:"title"`
//这里忽略一些和本文无关的属性
User User `gorm:"foreignkey:Author;association_foreignkey:Uid"`
Sort Sort `gorm:"foreignkey:Sortid;association_foreignkey:Sid"`
}
当然不要忘了,在查询的时候使用
.Preload("User").Preload("Sort")
否则不会生效的哦…