複数の従業員が同じ会社に所属し、会社には複数の人間が含まれており、所属する部分に配置されたリレーションシップにより、
別のモデルと 1 対 1 の接続が確立されます。このようなモデルのすべてのインスタンスは、別のモデルのインスタンスに「属します」。
たとえば、アプリケーションにはユーザーと会社が含まれており、各ユーザーは 1 つの会社にのみ割り当てることができます。次のタイプはこの関係を表します。User オブジェクトには Company と同じ CompanyID があることに注意してください。デフォルトでは、CompanyID はユーザーと会社の間に外部キー関係を作成するために暗黙的に使用されるため、会社の内部構造を設定するにはユーザー構造に含める必要があります。
- モデルを宣言する
type Company struct {
ID int
Name string
Code string
}
type User struct {
gorm.Model
Name string
CompanyRefer int
Company Company `gorm:"foreignKey:CompanyRefer"`
// 使用 CompanyRefer 作为外键
}
- テーブルの作成
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{
})
}
- レコードの作成
package main
import (
"ellis/mysqltest"
)
func main() {
mysqltest.Initdb()
// // 创建数据库
mysqltest.InitTable()
mysqltest.Create(&mysqltest.User{
Company: mysqltest.Company{
ID: 1, Code: "haha"}, Name: "ellis"})
}