model:设计表-字段类型、属性、不同表字段关系

本文介绍了ORM(对象关系映射)中模型与数据库表的对应关系,包括关系设置、模型定义如自定义表名、索引、引擎及参数配置。详细探讨了模型字段如何与数据库类型的匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

orm对象关系映射,通过对象(即struct)与数据库的table一一对应

1.关系设置

package main

import(
	"github.com/astaxie/beego/orm"
	_ "github.com/go-sql-driver/mysql"
)

type Child struct{
	Id int
	Name string
	Born *Born `orm:"rel(one)"`//1 -1
	Relatives []*Relative   `orm:"reverse(many)"`//1-n Relative表体现
	Parents []*Parent  `orm:"rel(m2m)"`//n-n 中介表体现
}
type Relative struct{
	Id int
	Relation string
	Child  *Child `orm:"rel(fk)"`//1-n
}
type Born struct {
	Id int
	Hospital string
	Num int//出生证明编号
	Child  *Child `orm:"reverse(one)"`//1-1
}
type Parent struct {
	Id int
	Work string
	Childs []*Child `orm:"reverse(many)"`// n-n
}

func main(){
	orm.RegisterDataBase("default","mysql","root:123456@tcp(192.168.160.140:3306)/pyg")
	orm.RegisterModel(new(Child),new(Relative),new(Born),new(Parent))
	orm.RunSyncdb("default",false,true)
}

2.模型定义

2.1自定义表名

2.2自定义索引

2.3 自定义引擎

2.4 设置参数

多个设置间使用 ; 分隔,设置的值如果是多个,使用 , 分隔.

`orm:"null;rel(fk)"`
`orm:"-"`//忽略字段
`orm:"auto"`
`orm:"pk"`
`orm:"null"`
`orm:"index"`
`orm:"unique"`
`orm:"size(60)"`
`orm:"default(1)"`
`orm:"default(1);description(这是状态字段)" `

type
Created time.Time `orm:"auto_now_add;type(date)"`
Created time.Time `orm:"auto_now_add;type(datetime)"`
Created time.Time `orm:"auto_now_add;type(datetime)"`
Updated time.Time `orm:"auto_now;type(datetime)"`

Money float64 `orm:"digits(12);decimals(4)"`


表关系设置:1-1
`orm:"null;rel(one);on_delete(set_null)"`   VS  `orm:"reverse(one)"`
1-n
 `orm:"rel(fk)"` (在弱势一方,即设置外键)  VS    `orm:"reverse(many)"`(强势一方) 
n-n
`orm:"rel(m2m)"`   VS      `orm:"reverse(many)"`


on_delete 设置对应的 rel 关系删除时,如何处理关系字段:
cascade        级联删除(默认值)
set_null       设置为 NULL,需要设置 null = true
set_default    设置为默认值,需要设置 default 值
do_nothing     什么也不做,忽略

模型字段与数据库类型的对应

 

gomysql
int, int32 - 设置 auto 或者名称为 Id 时integer AUTO_INCREMENT
int64 - 设置 auto 或者名称为 Id 时bigint AUTO_INCREMENT
uint, uint32 - 设置 auto 或者名称为 Id 时integer unsigned AUTO_INCREMENT
uint64 - 设置 auto 或者名称为 Id 时bigint unsigned AUTO_INCREMENT
boolbool
string - 默认为 size 255varchar(size)
string - 设置 type(char) 时char(size)
string - 设置 type(text) 时longtext
time.Time - 设置 type 为 date 时date
time.Timedatetime
bytetinyint unsigned
runeinteger
intinteger
int8tinyint
int16smallint
int32integer
int64bigint
uintinteger unsigned
uint8tinyint unsigned
uint16smallint unsigned
uint32integer unsigned
uint64bigint unsigned
float32double precision
float64double precision
float64 - 设置 digits, decimals 时numeric(digits, decimals)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值