在做一个老项目迁移,从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")
否则不会生效的哦…