models.go
import ( "github.com/astaxie/beego/orm" ) type User struct { Id int Name string Profile *Profile `orm:"rel(one)"` // OneToOne relation } type Profile struct { Id int Age int //User *User `orm:"reverse(one)"` // 设置反向关系(可选) } func init() { // 需要在 init 中注册定义的 model orm.RegisterModel(new(User), new(Profile)) }
index.go文件源码
package controllers import ( "fmt" "quickstart/models" "github.com/astaxie/beego" "github.com/astaxie/beego/orm" _ "github.com/go-sql-driver/mysql" ) type IndexController struct { beego.Controller } func (c *IndexController) Index() { o := orm.NewOrm() o.Using("default") var user = models.User{} qs := o.QueryTable("user") fmt.Println(qs) err := qs.Filter("id", "3").RelatedSel().One(&user) //err := o.QueryTable("user").Filter("id", "2").Limit(1).One(&user) //o.LoadRelated(profile,"User") fmt.Println(user.Id) //结果为2 if err == nil { //for _, v := range user { fmt.Println(user.Name) //结果为tom2 fmt.Println(user.Profile.Age) //结果为32 //} } c.Data["Website"] = "beego.me3344" c.Data["Email"] = "astaxie@gmail.com1122" c.TplName = "myindex.tpl" } func init() { // 注册驱动 orm.RegisterDriver("mysql", orm.DRMySQL) // 注册默认数据库 // 我的mysql的root用户密码为tom,打算把数据表建立在名为test数据库里 // 备注:此处第一个参数必须设置为“default”(因为我现在只有一个数据库),否则编译报错说:必须有一个注册DB的别名为 default orm.RegisterDataBase("default", "mysql", "root:root@tcp(127.0.0.1:3306)/godb?charset=utf8") }
两个MYSQL数据表:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(60) DEFAULT NULL,
`profile_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
CREATE TABLE `profile` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;