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

news2025/3/9 23:43:46

 

 

 

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 []}]}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1007656.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

导数公式及求导法则

目录 基本初等函数的导数公式 求导法则 有理运算法则 复合函数求导法 隐函数求导法 反函数求导法 参数方程求导法 对数求导法 基本初等函数的导数公式 基本初等函数的导数公式包括: C0(x^n)nx^(n-1)(a^x)a^x*lna(e^x)e^x(loga(x))1/(xlna)(lnx)1/x(sinx)cos…

十大排序算法及Java中的排序算法

文章目录 一、简介二、时间复杂度三、非线性时间比较类排序冒泡排序(Bubble Sort)排序过程代码实现步骤拆解演示复杂度 选择排序(Selection Sort)排序过程代码实现步骤拆解演示复杂度 插入排序(Insertion Sort&#xf…

用冒泡排序完成库函数qsort的作用

Hello,今天分享的是我们用冒泡函数实现qsort,也就是快排,之前我们也讲过库函数qsort的使用方法,今天我们尝试用冒泡函数实现一下,当然我们也见过qsort,后面也会继续完善的。这几天我是破防大学生&#xff0…

使用python制作一个简单的任务管理器

本篇文章教大家 使用 Python 创建一个简单的任务管理器应用程序。这个项目将帮助你练习 Python 编程的许多方面,包括文件操作、用户输入处理和基本的命令行界面设计。在这篇文章中,我将指导你创建一个基本的命令行任务管理器。 目录 任务管理器的用途任务…

NLP机器翻译全景:从基本原理到技术实战全解析

目录 一、机器翻译简介1. 什么是机器翻译 (MT)?2. 源语言和目标语言3. 翻译模型4. 上下文的重要性 二、基于规则的机器翻译 (RBMT)1. 规则的制定2. 词典和词汇选择3. 限制与挑战4. PyTorch实现 三、基于统计的机器翻译 (SMT)1. 数据驱动2. 短语对齐3. 评分和选择4. PyTorch实现…

App Inventor 2 实现Ascii码转换(Ascii编码与解码)

之前有同学问,App Inventor 2 字符及Ascii码如何进行转换,经过调查,其原生的组件和内置块无法完成这个功能,网上也有利用Web客户端组件执行js代码来进行转换,不过逻辑稍复杂效率还不高。这里介绍一个拓展可以非常方便的…

【算法系列 | 8】深入解析查找算法之—二分查找

序言 心若有阳光,你便会看见这个世界有那么多美好值得期待和向往。 决定开一个算法专栏,希望能帮助大家很好的了解算法。主要深入解析每个算法,从概念到示例。 我们一起努力,成为更好的自己! 今天第8讲,讲一…

CrossOver 23 正式发布:可在 Mac 上运行部分 DX12 游戏

CodeWeivers 公司于今年 6 月发布了 CrossOver 23 测试版,重点添加了对 DirectX 12 支持,从而在 Mac 上更好地模拟运行 Windows 游戏。 该公司今天发布新闻稿,表示正式发布 CrossOver 23 稳定版,在诸多新增功能中,最值…

【经典小练习】JavaSE—拷贝文件夹

🎊专栏【Java小练习】 🍔喜欢的诗句:天行健,君子以自强不息。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 文章目录 🎄效果🌺代码🛸讲解&#x…

Java学习之--类和对象

💕粗缯大布裹生涯,腹有诗书气自华💕 作者:Mylvzi 文章主要内容:Java学习之--类和对象 类和对象 类的实例化: 1.什么叫做类的实例化 利用类创建一个具体的对象就叫做类的实例化! 当我们创建了…

预算有限但想改善客户服务?教你几招轻松解决~

这里有一个常见的误解:只有大公司需要客户服务。事实是,无论行业规模大小,出色的客户服务对每个企业都至关重要。事实上,企业规模越小,客户服务就越重要,因为他们无法承受失去客户的后果。 不仅如此&#…

连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了。

连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了。 问题 package mainimport ("fmt""reflect""unsafe" )func main() {var s1 []ints2 : make([]int,0)s4 : make([]int,0)fmt.Printf("s1 pointer:%v, s2 p…

【UE虚幻引擎】UE源码版编译、Andorid配置、打包

首先是要下载源码版的UE,我这里下载的是5.2.1 首先要安装Git 在你准备放代码的文件夹下右键点击Git Bash Here 然后可以直接git clone https://github.com/EpicGames/UnrealEngine 不行的话可以直接去官方的Github上下载Zip压缩包后解压 运行里面的Setup.bat&a…

浅谈C++|STL之vector篇

一.vector的基本概念 vector是C标准库中的一种动态数组容器,提供了动态大小的数组功能,能够在运行时根据需要自动扩展和收缩。vector以连续的内存块存储元素,可以快速访问和修改任意位置的元素。 以下是vector的基本概念和特点: 动…

第27章_瑞萨MCU零基础入门系列教程之freeRTOS实验

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…

Anaconda下Jupyter Notebook执行OpenCV中cv2.imshow()报错(错误码为1272)网上解法汇总记录和最终处理方式

零、我设备的相关信息 Python 3.8.8Anaconda3 2021.05查询匹配python3.8.*的OpenCV匹配版本为:4.1.* — 4.2.*,我最后安装4.2.0.32版本如下我记录了 “从发现问题,到不断试错,最后解决问题” 的完整过程,以备自己复盘…

二叉树顺序存储结构

目录 1.二叉树顺序存储结构 2.堆的概念及结构 3.堆的相关接口实现 3.1 堆的插入及向上调整算法 3.1.1 向上调整算法 3.1.2 堆的插入 3.2 堆的删除及向下调整算法 3.2.1 向下调整算法 3.2.2 堆的删除 3.3 其它接口和代码实现 4.建堆或数组调堆的两种方式及复杂度分析…

SpringCloud Eureka搭建会员中心服务提供方-集群

😀前言 本篇博文是关于SpringCloud Eureka搭建会员中心服务提供方-集群,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您…

【Transformer系列】深入浅出理解Attention和Self-Attention机制

一、参考资料 课件:10_Transformer_1.pdf 视频:Transformer模型(1/2): 剥离RNN,保留Attention 二、Attention without RNN Attention模型可以看到全局的信息。 本章节以 Seq2Seq( (encoder decoder)) 模型为例&…

算法通关18关 | 回溯模板如何解决复原IP问题

18关的前几篇文章看过之后,对回溯的模板问题基本解题思路就知道了,就是固定的for循环问题,外层for循环控制横向,递归控制纵向,还要考虑撤销操作和元素是否能被重复利用问题,重复利用的情景较少,…