Golang gorm many2many查询

news2024/11/17 13:18:44

多对多关系


多对多关系,需要用第三张表存储两张表的关系

 多对多就必须得加上many2many的tag。article_tags是用来指定第三张表,

package main

import (
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

type Tag struct {
	ID       uint
	Name     string
	Articles []Article `gorm:"many2many:articles_tags;"`
}

type Article struct {
	ID    uint
	Title string
	Tags  []Tag `gorm:"many2many:articles_tags;"`
}

func main() {
	dsn := "root:7PXjAkY!&nlR@tcp(192.168.11.128:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
	db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	db.AutoMigrate(&Article{}, &Tag{})
	db.Create(&Article{
		Title: "python基础",
		Tags: []Tag{
			{Name: "python"},
			{Name: "后端"},
		},
	})
}
mysql> select * from articles;
+----+--------------+
| id | title        |
+----+--------------+
|  2 | python?虹?   |
+----+--------------+

mysql> select * from tags;
+----+--------+
| id | name   |
+----+--------+
|  1 | python |
|  2 | ?..   |
+----+--------+


mysql> select * from articles_tags;
+--------+------------+
| tag_id | article_id |
+--------+------------+
|      1 |          2 |
|      2 |          2 |
+--------+------------+

创建了一篇文章和两个tag,同时还会去创建其依赖关系。第三张表会自己去创建。

关联已有文章就得先查。

	var tags []Tag
	db.Find(&tags, "name in ?", []string{"python"})

	db.AutoMigrate(&Article{}, &Tag{})
	db.Create(&Article{
		Title: "golang",
		Tags:  tags,
	})



mysql> select * from articles_tags;
+--------+------------+
| tag_id | article_id |
+--------+------------+
|      1 |          2 |
|      2 |          2 |
|      1 |          4 |
+--------+------------+

mysql> select * from tags;
+----+--------+
| id | name   |
+----+--------+
|  1 | python |
|  2 | ?..   |
+----+--------+

mysql> select * from articles;
+----+--------------+
| id | title        |
+----+--------------+
|  2 | python?虹?   |
|  3 | golang       |
|  4 | golang       |
+----+--------------+

 

 

 

 

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

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

相关文章

如何选择适合你的开源电商 ERP 系统

在这篇文章中,我们将分享一些有用的提示,帮助你在选择开源电商 ERP 系统时做出明智的决定。 开源电商 ERP 系统的重要性 开源电商 ERP 系统可以帮助你管理库存、订单和客户信息,使你的业务更加高效和可靠。与传统的ERP系统相比,…

打造全球浪漫:2023七夕节出海品牌的国际化营销创意

随着时间的流转,2023年的七夕节即将到来,这是一年一度的浪漫佳节,被众多情侣们期待已久。而对于出海品牌来说,七夕节不仅是一个传统的节日,更是一个极具营销价值的时刻。在这个浪漫的节日里,出海品牌可以借…

一文学会lua脚本

文章目录 0.前言背景应用 1. 学习大纲1. 学习基本语法:2. 理解函数和模块:3. 深入数据结构:4. 高级特性和技巧:5. 实践项目: 2. Lua脚本2.1 学习基本语法2.2 理解函数和模块2.3 深入数据结构2.4 高级特性和技巧 3. 高级…

无涯教程-PHP - XML GET

XML Get已用于从xml文件获取节点值。以下示例显示了如何从xml获取数据。 Note.xml 是xml文件&#xff0c;可以通过php文件访问。 <SUBJECT><COURSE>Android</COURSE><COUNTRY>India</COUNTRY><COMPANY>LearnFk</COMPANY><PRICE…

从月薪2300到年薪180万,流水线厂妹变身谷歌工程师,她靠什么逆天改命?

近日&#xff0c;一个90后女孩孙玲收到了谷歌的offer&#xff0c;年薪总包180万的她&#xff0c;顺利进阶为外界眼中闪闪发光的“高收入群体”。 她来自农村&#xff0c;曾2次被迫辍学。 好不容易争取到上学的机会&#xff0c;高考却只考了399分&#xff0c;没有大学可上。 …

Vulnhub系列靶机---Infosec_Warrior1

InfoSecWarrior CTF 2020: 01官网地址 难易程度&#xff1a;So Easy 信息收集 主机发现 arp-scan -l端口扫描 nmap -A -p- 192.168.80.145目录爆破 dirsearch -u 192.168.80.145 -i 200访问80端口&#xff0c;只能看出是Apache站点&#xff0c;没有别的 访问一下sitemap.xm…

【前端工程师必备-UI设计师必备-素材图片资源网站】免费图标网站、免费图片素材网站、UI作品大全、渐变色生成工具(css样式代码+图片素材)、免费矢量图

【前端工程师必备-素材图片资源网站】免费图标网站、免费图片素材网站、UI作品大全、渐变色生成工具&#xff08;css样式代码图片素材&#xff09;、免费矢量图 一、免费图标网站集合1、iconfont2、iconfinder3、icons8 二、免费图片素材网站1、mixkit2、菜鸟图库 三、免费矢量…

linux 移动mv命令(实战案例)

linux 移动命令&#xff08;你真的会用吗&#xff1f;&#xff1f;&#xff1f;&#xff09; 第一种情况&#xff1a;移动文件 例如&#xff1a; 将/gdda_file 文件下的 zlib-devel-1.2.7-18el7.x86_64.rpm 移动到 /root/ces/tools文件下 解决方法&#xff1a; mv /gdda_fi…

Linux 系统的如何优化(面试题)

Linux 系统的如何优化&#xff08;面试题&#xff09; (1) 禁用不需要的服务 ntsysv 命令最为方便&#xff0c;执行后&#xff0c;把不需要的勾选去掉就行 &#xff08;2&#xff09;避免直接使用root用户&#xff0c;普遍用户通过sudo授权操作 &#xff08;3&#xff09;通过…

redis 7高级篇1 redis的单线程与多线程

一 redis单线程与多线程 1.1 redis单线程&多线程 1.redis的单线程 redis单线程主要是指Redis的网络IO和键值对读写是由一个线程来完成的&#xff0c;Redis在处理客户端的请求时包括获取 (socket 读)、解析、执行、内容返回 (socket 写) 等都由一个顺序串行的主线程处理…

ubuntu 20.04 安装 高版本cuda 11.7 和 cudnn最新版

一、安装显卡驱动 参考另一篇文章&#xff1a;Ubuntu20.04安装Nvidia显卡驱动教程_ytusdc的博客-CSDN博客 二、安装CUDA 英伟达官网&#xff08;最新版&#xff09;&#xff1a;CUDA Toolkit 12.2 Update 1 Downloads | NVIDIA Developer CUDA历史版本下载地址&#xff1a;C…

上网课用什么耳机和麦克风,分享几款骨传导耳机上网课用

各位耳机狂热者&#xff0c;咱们都了解传统的蓝牙耳机相对于老式有线耳机来说确实方便得多。但是&#xff0c;也别忘了蓝牙耳机会导致耳道不断堵塞&#xff0c;引发细菌滋生等问题。好在近年来&#xff0c;骨传导耳机如火如荼地走红&#xff0c;解决了这些难题&#xff0c;简直…

selenium Chrome驱动下载地址

Chrome驱动官方最新版下载地址:https://googlechromelabs.github.io/chrome-for-testing/ 有稳定版&#xff0c;开发版等版本可以选择下载 选择 操作系统复制下载链接直接下载

Hyperf 如何做到用两个端口 9501/9502 都能连接 Websocket 服务以及多 Worker 协作实现聊天室功能

为何 Hyperf 能够在两个端口上监听 WebSocket 连接&#xff1f; 源码角度来看&#xff0c;在配置了多个 Servers 时&#xff0c;实际上&#xff0c;只启动了一个 Server 注&#xff1a;我之前接触的代码都是启动一个服务绑定一个端口&#xff0c;之前也看过 swoole 扩展的文档…

这种隐形行为,酒店管理需警惕!

当火灾爆发时&#xff0c;及早的警报和响应可以挽救生命并减少财产损失。烟感监控系统作为一种关键设施&#xff0c;通过检测空气中的烟雾&#xff0c;能够在火灾初期就发出警报&#xff0c;为人们提供宝贵的时间来采取紧急措施。 烟感监控在各种场所如住宅、商业建筑、工厂等都…

机器人制作开源方案 | 滑板助力器

我们可以用一块废滑板做些什么呢&#xff1f; 如今&#xff0c;越来越多的人选择电动滑板作为代步工具或娱乐方式&#xff0c;市场上也涌现出越来越多的电动滑板产品。 &#xff08;图片来源&#xff1a;Backfire Zealot X Belt Drive Electric Skateboard– Backfire Boards…

磁铁的吸力与磁吸器件

目前磁铁很多的应用是利用其同极相斥异极相吸以及对铁磁性物质吸附的原理&#xff0c;如各类磁吸器件、磁性连接结构、磁选设备、磁传动设备等。 对于磁吸类的应用&#xff0c;大家都非常关注磁铁的吸力。磁铁的吸力是可以计算的&#xff0c;有如下公式可以参考&#xff0c;但…

深入浅出 TCP/IP 协议栈

TCP/IP 协议栈是一系列网络协议的总和&#xff0c;是构成网络通信的核心骨架&#xff0c;它定义了电子设备如何连入因特网&#xff0c;以及数据如何在它们之间进行传输。TCP/IP 协议采用4层结构&#xff0c;分别是应用层、传输层、网络层和链路层&#xff0c;每一层都呼叫它的下…

【Spring Boot】JdbcTemplate数据连接模板 — 使用JdbcTemplate操作数据库

使用JdbcTemplate操作数据库 成功在Spring Boot项目中集成JdbcTemplate后&#xff0c;如何使用JdbcTemplate数据库连接模板操作数据库呢&#xff1f;接下来以示例演示JdbcTemplate实现学生信息的增、删、改、查等操作&#xff0c;让我们在实践中边学边用&#xff0c;更好地理解…

Maven之Servlet 版本问题

maven-archetype-webapp 骨架的 Servlet 版本问题 通过 maven-archetype-webapp 骨架去创建 java web 项目时&#xff0c;自动生成的 web.xml 配置文件所使用的 Servlet 的版本比较低&#xff08;2.3&#xff09;&#xff0c;而在低版本的 Servlet 中 EL 表达式默认是关闭的。…