第一种方法,直接查
func (this *TestController) Show() {
o := orm.NewOrm()
var maps []orm.Params
o.Raw("select arc.id,arc.title,arc.typeid,art.typename from go_archives as arc left join go_arctype as art on art.id=arc.typeid where arc.typeid=?", 2).Values(&maps)
fmt.Println(maps)
}
场景一:一个文章表archives,一个文章栏目表arctype,文章表的arctype_id=栏目表的id,我想查询文章的时候查询出文章的栏目名称arctype.typename。这样就是多对一。 也就是archives 和 arctype 是 ManyToOne 关系,也就是 ForeignKey 为 arctype,关系弄清楚后我们来建模型
项目/models/models.go
package models
import (
"github.com/astaxie/beego/orm" //引入beego的orm
_ "github.com/go-sql-driver/mysql" //引入beego的mysql驱动
)
//表go_archives的结构
type Archives struct {
Id int
Title string `orm:"size(255)"`
Body string `orm:"size(1000)"`
Arctype *Arctype `orm:"rel(fk)"`
}
//表go_arctype的结构
type Arctype struct {
Id int
Topid int
Typename string `orm:"size(100)`
Sort int
}
func init() {
orm.RegisterDriver("mysql", orm.DR_MySQL) //注册数据库驱动
orm.RegisterDataBase("default", "mysql", "root:@/go?charset=utf8") //注册一个别名为default的数据库
orm.SetMaxIdleConns("default", 30) //设置数据库最大空闲连接
orm.SetMaxOpenConns("default", 30) //设置数据库最大连接数
orm.RegisterModelWithPrefix("go_", new(Archives)) //注册模型并使用表前缀
orm.RegisterModelWithPrefix("go_", new(Arctype)) //注册模型并使用表前缀
}
func (this *TestController) Show3() {
o := orm.NewOrm()
var arc []*models.Archives
o.QueryTable("go_archives").Filter("Id__gt", 1).RelatedSel().All(&arc)//使用RelatedSel将关联的arctype也查出来,也就是left join arctype as T1 on T1.id=go_archives.arctype_id
arc3 := arc[0]
fmt.Println(arc3.Arctype.Typename)
}
场景二:一个文章表archives,一个文章附件表annex,文章表的id=附件表的annex_id,我想查询文章的时候查询出文章的附件。这样就是一对一。 也就是archives 和 annex是 OneToOne 关系,关系弄清楚后我们来建模型
今天累了,改天我测试好了贴代码