初始化
创建新beego项目
bee new test
在main.go中开始测试
模型关系
# 外键始终在子表上
#一个用户对应一个简介;一个简介对应一个用户;
one2one:User(子表) -> Profile(主表);one2one:Profile -> User
#一个邮件对应一个用户;一个用户有多个邮件;
one2many:Post(子表) -> User(主表);many2one:User -> Post
#一个邮件对应多个标签;一个标签对应多个邮件;
many2many:Post(子表) -> Tag(主表);many2many:Tag -> Post
新建4个结构体
使用标签`orm:"column(id)`对属性进行标注,用于解析。
标注逻辑外键,自动建表时不会生成外键。
`orm:"rel(one)"` 表示one2one
`orm:"rel(fk)"` 表示one2many
`orm:"rel(m2m)"` 表示many2many
`orm:"reverse(one)"` `orm:"reverse(one)"` 标注反向关系
type User struct {
⇥ Id int `orm:"column(id);auto" description:"id"`
⇥ Name string `orm:"column(name)" description:"name"`
⇥ Profile *Profile `orm:"rel(one)"` // OneToOne relation
⇥ //Posts []*Post `orm:"reverse(many)"` //one2many情况下,不要写reverse
}
type Profile struct {
⇥ Id int `orm:"column(id);auto" description:"id"`
⇥ Age int16 `orm:"column(age)" description:"age"`
⇥ //User *User `orm:"reverse(one)"` // Reverse relationship (optional)
}
type Post struct {
⇥ Id int `orm:"column(id);auto" description:"id"`
⇥ Title string `orm:"column(title)" description:"title"`
⇥ User *User `orm:"rel(fk)"` // OneToMany relation
⇥ Tags []*Tag `orm:"rel(m2m)"` // m2m relation
}
type Tag struct {
⇥ Id int `orm:"column(id);auto" description:"id"`
⇥ Name string `orm:"column(name)" description:"name"`
⇥ Posts []*Post `orm:"reverse(many)"`
}
初始化操作
//ormer
var O orm.Ormer
func init() {
⇥ //注册驱动
⇥ orm.RegisterDriver("mysql", orm.DRMySQL)
⇥ //注册默认数据库
⇥ orm.RegisterDataBase("default", "mysql", "root:root@tcp(192.168.99.100:3308)/test?charset=utf8")
⇥ //注册model
⇥ orm.RegisterModel(new(User), new(Profile), new(Post), new(Tag))
⇥ //自动建表
⇥ orm.RunSyncdb("default", false, true)
⇥ //初始化ormer
⇥ O = orm.NewOrm()
⇥ //初始化数据
⇥ datainit()
}
生成的database信息
执行之前,需要创建数据库test,并配置数据库信息,字符编码全部设置为utf8
执行:注册model,自动建表 即可得到如下信息。
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| post |
| post_tags |
| profile |
| tag |
| user |
+----------------+
5 rows in set (0.00 sec)
mysql> desc post;
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| title | varchar(255) | NO | | | |
| user_id | int(11) | NO | | NULL | |
+---------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)<