gin关联查询的一个小小的知识点

在做一个老项目迁移,从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")

否则不会生效的哦…