当前位置: 首页 > news >正文

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

 

 

 

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


	var a Article1db.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 Article1db.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 []Tag1db.Find(&t)var a Article1db.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 Tag1db.Take(&t, 1)var a Article1db.Preload("Tag1s").Take(&a, 2)db.Model(&a).Association("Tag1s").Replace(&t)fmt.Printf("%v", a){2 golang [{1 cloud []}]}

 

http://www.lryc.cn/news/165739.html

相关文章:

  • FPGA-结合协议时序实现UART收发器(四):串口驱动模块uart_drive、例化uart_rx、uart_tx
  • Transformers-Bert家族系列算法汇总
  • Vulnhub系列靶机---HarryPotter-Fawkes-哈利波特系列靶机-3
  • 【服务器】ASUS ESC4000-E11 安装系统
  • 创建java文件 自动添加作者、时间等信息 – IDEA 技巧
  • 第27章_瑞萨MCU零基础入门系列教程之freeRTOS实验
  • Java学习之--类和对象
  • Unity技术手册-UGUI零基础详细教程-Canvas详解
  • 破天荒呀!小杜微信有名额了
  • 领域驱动设计:领域模型与代码模型的一致性
  • TypeScript命名空间和模块
  • C++学习笔记--函数重载(1)
  • 交叉编译poco-1.9.2
  • C++中如何处理超长的数字(long long类型的整数都无法存储的)
  • RabbitMQ MQTT集群方案官方说明
  • 深圳唯创知音电子将参加IOTE 2023第二十届国际物联网展•深圳站
  • 《TCP/IP网络编程》阅读笔记--I/O复用
  • [C#] 允许当前应用程序通过防火墙
  • 帆软FineReport决策报表Tab实现方案
  • 只打印文名
  • 【经典小练习】JavaSE—拷贝文件夹
  • FPGA-结合协议时序实现UART收发器(六):仿真模块SIM_uart_drive_TB
  • Spring Boot集成EasyExcel实现数据导出
  • EasyExcel3.0读(日期、数字或者自定义格式转换)
  • 浅谈C++|STL之vector篇
  • 微信、支付宝修改步数【小米运动】
  • stu02-初识HTML
  • 软件测试7大误区
  • 【深度学习】 Python 和 NumPy 系列教程(十二):NumPy详解:4、数组广播;5、排序操作
  • CSS宽度问题