Varios empleados pertenecen a la misma empresa y una empresa contiene varias personas. La relación colocada en la parte que
pertenece establecerá una conexión uno a uno con otro modelo. Cada instancia de dicho modelo "pertenece" a una instancia de otro modelo.
Por ejemplo, su aplicación contiene usuarios y empresas, y cada usuario puede y sólo puede ser asignado a una empresa. Los siguientes tipos representan esta relación. Tenga en cuenta que en el objeto Usuario, hay un CompanyID que es el mismo que Company. De forma predeterminada, CompanyID se utiliza implícitamente para crear una relación de clave externa entre el Usuario y la Compañía y, por lo tanto, debe incluirse en la estructura del Usuario para completar la estructura interna de la Compañía.
- declarar modelo
type Company struct {
ID int
Name string
Code string
}
type User struct {
gorm.Model
Name string
CompanyRefer int
Company Company `gorm:"foreignKey:CompanyRefer"`
// 使用 CompanyRefer 作为外键
}
- Crear mesa
package mysqltest
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
var db *gorm.DB
func Initdb() {
dsn := "ellis:ellis@tcp(192.168.214.134:3306)/go_db?charset=utf8mb4&parseTime=True&loc=Local"
var err error
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
})
if err != nil {
panic(err)
}
}
func Create(value interface{
}) {
d := db.Create(value)
fmt.Printf("d.RowsAffected: %v\n", d.RowsAffected)
}
func InitTable() {
db.AutoMigrate(&Company{
}, &User{
})
}
- Crear registro
package main
import (
"ellis/mysqltest"
)
func main() {
mysqltest.Initdb()
// // 创建数据库
mysqltest.InitTable()
mysqltest.Create(&mysqltest.User{
Company: mysqltest.Company{
ID: 1, Code: "haha"}, Name: "ellis"})
}