首页 > 其他分享 >Golang gorm manytomany 多对多 更新、删除、替换

Golang gorm manytomany 多对多 更新、删除、替换

时间:2023-10-03 10:06:51浏览次数:33  
标签:+----+-------+ db manytomany +----+--------+ gorm Golang mysql id select


Golang gorm manytomany 多对多 更新、删除、替换_mysql

 

 

 

Delete 移除 只删除中间表的数据   删除原有的


var a Article1
	db.Preload("Tag1s").Take(&a, 1)
	fmt.Printf("%v", a)
{1 k8s [{1 cloud []} {2 linux []}]}

mysql> select * from article1;
+----+--------+
| id | title  |
+----+--------+
|  1 | k8s    |
|  2 | golang |
+----+--------+

mysql> select * from tag1;
+----+-------+
| id | name  |
+----+-------+
|  1 | cloud |
|  2 | linux |
+----+-------+

mysql> select * from article_tags;
+-------------+---------+
| article1_id | tag1_id |
+-------------+---------+
|           1 |       1 |
|           1 |       2 |
|           2 |       2 |
+-------------+---------+

(1)model 先拿到这张表,

(2)Association然后去连接tags第三张表

(3)之后就是最关键的要去执行什么操作,这里是delete,删除谁呢?删除的就是article关联的tag。

var a Article1
	db.Preload("Tag1s").Take(&a, 1)
	db.Model(&a).Association("Tag1s").Delete(a.Tag1s)
	fmt.Printf("%v", a)

{1 k8s []}


mysql> select * from tag1;
+----+-------+
| id | name  |
+----+-------+
|  1 | cloud |
|  2 | linux |
+----+-------+

mysql> select * from article1;
+----+--------+
| id | title  |
+----+--------+
|  1 | k8s    |
|  2 | golang |
+----+--------+

mysql> select * from article_tags;
+-------------+---------+
| article1_id | tag1_id |
+-------------+---------+
|           2 |       2 |
+-------------+---------+

 

 

添加 和上面一样使用Append


var t []Tag1
	db.Find(&t)

	var a Article1
	db.Preload("Tag1s").Take(&a, 1)
	db.Model(&a).Association("Tag1s").Append(&t)
	fmt.Printf("%v", a)

{1 k8s [{1 cloud []} {2 linux []}]}


mysql> select * from article1;
+----+--------+
| id | title  |
+----+--------+
|  1 | k8s    |
|  2 | golang |
+----+--------+

mysql> select * from tag1;
+----+-------+
| id | name  |
+----+-------+
|  1 | cloud |
|  2 | linux |
+----+-------+

mysql> select * from article_tags;
+-------------+---------+
| article1_id | tag1_id |
+-------------+---------+
|           1 |       1 |
|           1 |       2 |
|           2 |       2 |
+-------------+---------+

 

Replace  替换


var t Tag1
	db.Take(&t, 1)

	var a Article1
	db.Preload("Tag1s").Take(&a, 2)
	db.Model(&a).Association("Tag1s").Replace(&t)
	fmt.Printf("%v", a)

{2 golang [{1 cloud []}]}

 

标签:+----+-------+,db,manytomany,+----+--------+,gorm,Golang,mysql,id,select
From: https://blog.51cto.com/u_14035463/7689614

相关文章

  • Golang gin Cookie的使用
    Cookie介绍HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分两次请求是否由同一个客户端发出Cookie就是解决HTTP协议无状态的方案之一,中文是小甜饼的意思Cookie实际上就是服务器保存在浏览器上的一段信息。浏览器有了Cookie之后,每次向服务器发送请求时都会同......
  • Golang Array 数组使用注意事项和细节
    在go数组当中,长度是数据类型的一部分[3]int  *[3]int  数组使用注意事项和细节1)数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的,不能动态变化vara[3]inta[0]=1.1这样是不行的,必须是整数2)vararr[]int这时arr就是一个slice切片(如果[]里面没......
  • Gorm 错误处理
    在Go语言中,错误处理是很重要的。Go语言中鼓励人们在任何 创建方法之后去检查错误。错误处理由于GORM的链式API,GORM中的错误处理与惯用的Go代码不同,但它仍然相当容易。如果发生任何错误,GORM会将其设置为 *gorm.DB 的 Error 字段,你可以这样检查:iferr:=db.Where("na......
  • golang 代码实现一个工具函数:用于合并两个go map
    内容来自对chatgpt的咨询初始化一个新map,然后遍历两个旧map,把每个元素都存到新map即可。packagemainimport"fmt"//MergeMaps创建一个新的map用于保存合并后的值。返回新的map。funcMergeMaps(destMap,sourceMapmap[string]interface{})map[string]inter......
  • golang 代码实现:并发请求下游接口,下游接口限制请求参数中某数组单次最多传20个
    内容来自对chatgpt的咨询假设你有一个golang的数组,数组元素数量大于20,你需要调用下游接口,但是接口的请求参数限制了一次最多传20个,为了节省时间,你需要并发调用,完整整个数组的下游调用,请完成代码编写写法一我们将数组切分成最大20个元素的小块,并对每个块并发调用下游接口:p......
  • golang 代码实现如果在在一个秒级时间戳上加上23h59m59s
    代码来自chatgpt实现如果在在一个秒级时间戳上加上23h59m59s先把时间戳转换成time对象,然后利用Add函数在该对象上添加23h59m59s,最后获取时间对象的时间戳packagemainimport( "fmt" "time")funcmain(){ //Supposeyouhaveatimestampinseconds timestam......
  • golang grom 实现 INSERT...ON DUPLICATE KEY UPDATE
    内容来自对chatgpt的咨询前言(INSERT...ONDUPLICATEKEYUPDATE介绍)当你在MySQL中插入数据,如果唯一键发生冲突,可以使用INSERT...ONDUPLICATEKEYUPDATE语句实现插入和更新操作。其基本语法如下:INSERTINTOtable(col1,col2,...colN)VALUES(value1,value2,...va......
  • golang 使用 gorm 查询数据 demo
    内容来自对chatgpt的咨询题目假设你有一张学生数据库表,需要通过golang的gorm查询某个id的学生实体查询demo在这段代码中,"student"变量是一个Student类型的结构体,用于存储查询结果。我们通过调用gorm.DB的Where方法和First方法,将第一个符合条件的结果存储到了"student"......
  • golang 求出这两个对象数组的2个差集,即存在其中一个数组,但是不存在于另一个数组
    代码来自chatgptpackagemainimport( "fmt" "reflect")typeObjectstruct{ IDint}funcmain(){ a:=[]Object{{1},{2},{3}} b:=[]Object{{2},{3},{4}} diffAB:=diff(a,b) diffBA:=diff(b,a) fmt.Println("InAn......
  • Go每日一库之133:lo(基于泛型的 Golang lodash 库)
    近日,Go核心开发团队终于宣布了Go1.18正式版本的发布!这是一个大家期待很久的版本!Go1.18包含大量新功能:模糊测试、性能改进、工作区等,以及Go语言开源以来最大的一次语法特性变更——支持泛型!支持泛型后,我们便不再需要写如下冗余的代码:现在只需要简单的一行即可:funcMi......