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)
}