gorm使用preload解决一对多关系

package main

import (
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/jinzhu/gorm"
)

var DB *gorm.DB
type MaintenanceOrder struct {
	OrderId     string `gorm:"type:varchar(50);null"` //订单编号
	OrderStatus int //
	Images  []ImageTable
	ImageId   string  `gorm:"ForeignKey:Id"`
	// 报修人信息
}
type ImageTable struct {
	order    *MaintenanceOrder  `gorm:"ForeignKey:OrderId"`
	Id        uint `gorm:"primary_key"`
	ImageUrl  string
	RemarkId  string
}

func init() {
	var err error
	DB, err = gorm.Open("mysql", "root:123456@tcp(192.168.88.130:3306)/test?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		panic(err)
	}


	DB.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='图片表'").AutoMigrate(&ImageTable{})
	DB.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='图片表'").AutoMigrate(&MaintenanceOrder{})
	DB.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='图片表'").AutoMigrate(&Posts{})
	DB.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='图片表'").AutoMigrate(&Users{})

}


func main(){
	var user =Users{
		Username:"h7",
		PostsArticle:[]Posts{
			{
				Title:"这是一首简单的小情歌",
			},
			{
				Title:"东风破",
			},
		},
	}

	//DB.Preload("PostsArticle").Where("id=1").Find(&user)
	err:=DB.Create(&user).Error
	if err!=nil{
		fmt.Println(err)
		return
	}
	fmt.Println(user,user.Username,user.PostsArticle)
	fmt.Println(user.PostsArticle)


}

type Posts struct {
	gorm.Model
	//Key string `gorm:"unique:not null"`
	Userid int
	Title string `gorm:"type:varchar(200)"`
}

type Users struct {
	gorm.Model
	Username string `gorm:"unique_index"`
	// 一对多关系映射,一个用户有多篇文章
	PostsArticle []Posts `gorm:"FOREIGNKEY:Userid;ASSOCIATION_FOREIGNKEY:ID;ON DELETE CASCADE" `
}

场景如下:例如博客,一个用户有多个文章,为了便于维护和扩展,建立了用户表和文章表

现在想看看用户名下所有的文章,顺便也把用户信息拿出来

package main

import (
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/jinzhu/gorm"
)

var DB *gorm.DB

type Users struct {
	gorm.Model
	Username string `gorm:"unique_index"`
	// 一对多关系映射,一个用户有多篇文章,用户表的id作为关联键
	PostsArticle []Posts `gorm:"FOREIGNKEY:Userid;ASSOCIATION_FOREIGNKEY:ID"`
}

type Posts struct {
	gorm.Model
	//Key string `gorm:"unique:not null"`
	Userid     int
	Title      string `gorm:"type:varchar(200)"`
	Summart    string `gorm:"varchar(800)"`
	Content    string `gorm:"type:text"`
	VisitCount int    `gorm:"default:0"`
	Like       int    `gorm:"default:0"`
}

func init() {
	var err error
	DB, err = gorm.Open("mysql", "root:123456@tcp(192.168.88.130:3306)/test?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		panic(err)
	}

	DB.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='文章表'").AutoMigrate(&Posts{})
	DB.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户'").AutoMigrate(&Users{})
}

func main() {
	var user = new(Users)
	DB.Preload("PostsArticle").Where("id=1").Find(&user)
	fmt.Println(user, user.Username, user.PostsArticle)
	fmt.Println(user.PostsArticle[0].Title)
}

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值