指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub

gorm数据库操作上:

package product

import (
	"testing"
)

func TestGormOperation(t *testing.T) {
	//以下都是一对多操作
	//新增,无关联
	//Product :=model.Product{}
	//Product.Name = "超级大的滑雪场冬季必备"
	//Product.Kind = "文娱旅游"
	//
	//common.Db.Set("gorm:save_associations", false).Create(&Product)

	//新僧,有关联
	//Product := model.Product{}
	//Product.Name = "避暑的好地方"
	//Product.Kind = "文娱旅游"
	//Product.Attributes = []model.ProductAttribute{
	//	{Attribute: "地点", AttributeValue: "武汉"},
	//	{Attribute: "地点", AttributeValue: "成都"},
	//}
	//
	//common.Db.Create(&Product)

	//批量创建
	//products := []model.Product{{Name: "宝马", Kind: "游戏", Attributes: []model.ProductAttribute{
	//	{Attribute: "大灯", AttributeValue: "LED"},
	//	{Attribute: "方向盘", AttributeValue: "真皮"},
	//}}, {Name: "奔驰", Kind: "游戏", Attributes: []model.ProductAttribute{
	//	{Attribute: "大灯", AttributeValue: "LED"},
	//	{Attribute: "方向盘", AttributeValue: "真皮"},
	//}}}
	//
	//common.Db.Create(&products)
	//通过 CreateInBatches 限制批量插入的数量
	//common.Db.CreateInBatches(&products, 50)

	//products := []model.Product{{Name: "本田", Kind: "游戏", Attributes: []model.ProductAttribute{
	//	{Attribute: "大灯", AttributeValue: "LED"},
	//	{Attribute: "方向盘", AttributeValue: "真皮"},
	//}}, {Name: "大众", Kind: "游戏", Attributes: []model.ProductAttribute{
	//	{Attribute: "大灯", AttributeValue: "LED"},
	//	{Attribute: "方向盘", AttributeValue: "真皮"},
	//}}}
	////Omit 忽略 某些字段(关联),这里直接 clause.Associations,忽略所有的关联
	//common.Db.Omit(clause.Associations).Create(products)

	//update with callbacks,这个更新操作将执行模型的BeforeUpdate, AfterUpdate方法,更新其UpdatedAt时间戳
	//common.Db.Model(model.Product{}).Set("gorm:save_associations", false).Where("id = ?", 8).Updates(map[string]interface{}{"name":"避暑旅游打卡的好地方"})

	//update,这个更新操作不会执行 callbacks相关的方法
	//common.Db.Model(model.Product{}).Set("gorm:save_associations", false).Where("id = ?", 8).UpdateColumns(map[string]interface{}{"name": "避暑旅游打卡带娃野炊的好地方", "kind": "医疗健康"})

	//update,这个更新操作不会执行 callbacks相关的方法,通过 Omit 忽略某些字段,不做更新
	//common.Db.Model(model.Product{}).Set("gorm:save_associations", false).Where("id = ?", 8).Omit("name").UpdateColumns(map[string]interface{}{"name": "避暑旅游打卡带娃野炊的好地方", "kind": "医疗健康"})

	//update,同时更新相关的关联模型,如果待更新内容不包含 关联模型字段,那么直接更新成功
	//common.Db.Model(model.Product{}).Where("id = ?", 8).UpdateColumns(map[string]interface{}{"name": "避暑旅游团建的好地方", "kind": "健身运动"})

	//关于更新有几个细节问题:①如果使用map的话可以更新任意结果,但是如果使用struct的话,如果待更新值为 "" 0 false,都不会被更新,下面的name值不会变
	//common.Db.Model(model.Product{}).Where("id = ?", 8).UpdateColumns(model.Product{Name: "", Kind: "中医理疗"})
	//name的值变为空
	//common.Db.Model(model.Product{}).Where("id = ?", 8).UpdateColumns(map[string]interface{}{"name": "", "kind": "中医理疗"})

	//带关联模型的 更新,我还没找到怎么更新关联关系...,下面这个肯定是不行的,因为没有关联关系数据的id
	//product := model.Product{Name: "避暑旅游团建打卡的好地方", Kind: "健身运动", Attributes: []model.ProductAttribute{
	//	{Attribute: "大灯", AttributeValue: "LED"},
	//	{Attribute: "方向盘", AttributeValue: "真皮"},
	//}}
	//common.Db.Model(model.Product{}).Where("id = ?", 8).Save(product)


	//删除操作,当数据库定义了 deleted_at,那么就会出发软删除操作(给deleted_at赋值)
	//common.Db.Where("id = ?", 1).Delete(&model.Order{})

	//Unscoped的用法,①可以用来硬删除数据 ②可以用来查询软删除的数据
	//order := model.Order{}
	//common.Db.Where("id = ?", 1).Unscoped().First(&order)
	//fmt.Printf("order is:%+v\n", order)

	//common.Db.Where("id = ?", 1).Unscoped().Delete(&model.Order{})


	//验证 多对多 操作
	//TODO::明天更新

}