GORM 入门笔记(八)多对多关联(Many To Many)
Many To Many(多对多)
如果你一对多关系搞懂了的话,多对多其实也很容易
1 | type Student struct { |
就是互相放对方的切片嘛,但是这个关系交给一个第三方表来记录,所以需要加一个 tag
然后建表,可以看见建了三个表
1 | GLOBAL_DB.AutoMigrate(&Student{}, &Teacher{}) |
创建
这个应该很简单了
1 | teacher1 := Teacher{Name: "teacher1"} |
可见二者的关系是靠一个中间表来维护的
查询
这个还不是预加载那一套?其实和上一节差不多的
1 | var result = Student{Id: 1} |
但是有时候结果只需要一个 teacher 的切片,这时候怎么办?
可以使用配合 Association()
1 | var student = Student{Id: 1} |
这个时候还想把 teacher 里面的学生也带出来怎么办?用预加载
1 | GLOBAL_DB.Model(&student).Preload("Students").Association("Teachers").Find(&result) |
(当然你还可以套娃下去)
如果还有子模型,还可以结合上节的 Joins ,等等
这些和之前的是一样的,还有什么关系的维护方法也是和之前一样的
只是存储的结构变了而已
评论
GiscusTwikoo