type Author struct {AID int `gorm:"primary_key;AUTO_INCREMENT"`Name stringAge stringSex string//关联关系Article []Article `gorm:"ForeignKey:Auid;AssociationForeignKey:AID"`
}
type Article struct {ArId int `gorm:"primary_key;AUTO_INCREMENT"`Title stringContent stringDesc string//设置外键AuId int
}
创建
author := Author{Name: "张三",Age: 30,Sex: "男",Article: []Article{{Title: "HTML入门",Content: "",Desc: "",},{Title: "HTML入门",Content: "",Desc: "",},},}db.Create(&author)
查询一
//Association方式查询,因为关联关系在Author中,所以我们操作的是Author模型var author Author//如果只执行下面这步操作,那么关联的Article信息是查询不到的db.Debug().First(&author, "info_id=?", 1)//如果想要查询到Author相关内容,必须执行如下操作://Model参数:要查询的表数据,Association参数:关联到具体的模型,模型名称Article(字段名字)//Find参数:查询的数据要放在什么字段中&author.Articledb.Debug().Model(&author).Association("Article").Find(&author.Article)
查询二
//preLoad方式查询var author Author//查询a_id=1的数据放入author中,并关联查询Article字段对应的数据db.Debug().Preload("User").Find(&author, "a_id=?", 1)
更新
var author Author//查询a_id=1的数据放入author中,并关联查询Article字段对应的数据db.Debug().Preload("User").Find(&author, "a_id=?", 1)//再更新//如果直接Update操作,那么关联的文章记录就会被全部更改//db.Model(&author.Article).Update("title", "go入门")//所以你要改动指定的记录,必须加入限定条件db.Model(&author.Article).Where("ar_id=?", 1).Update("title", "go入门")
删除
var author Author//查询a_id=1的数据放入author中,并关联查询Article字段对应的数据db.Debug().Preload("User").Find(&author, "a_id=?", 1)//再删除:必须加入指定条件db.Where("ar_id=?", 2).Delete(&author.Article)