首先糾正一下beego的文件
rel_table實際上設定自動生成的 m2m 關係表的名稱
rel_through
的格式並不是pkg.path.modelname
,正確的姿勢是:
// 不要照抄哈,這裡只是eg應該怎麼使用
在這裡卡了一天,後來還是在google的幫助下找到了問題,bd能搜尋出關於go的東西實在太少了
需求:使用者、角色。
我們要實現乙個使用者可以有多個角色,乙個角色可以有多個使用者
使用者表 user
idusername
passwrod
created_at
updated_at
1testa
123456
2018-01-01 12:36:47
2018-01-01 12:36:47
2testb
654321
2018-01-01 12:36:47
2018-01-01 12:36:47
角色表 role
idname
created_at
updated_at
1測試角色a
2018-01-01 12:36:47
2018-01-01 12:36:47
2測試角色b
2018-01-01 12:36:47
2018-01-01 12:36:47
角色使用者關係表 role_user
iduser_id
role_id
created_at
updated_at11
12018-01-01 12:36:47
2018-01-01 12:36:4721
22018-01-01 12:36:47
2018-01-01 12:36:4732
12018-01-01 12:36:47
2018-01-01 12:36:47
使用者模型
注意!使用多對多時,想要獲取關係欄位是需要手動完成的,orm不會為你自動完成這些查詢操作,不要以為設定完rel_through就完事了!
type user struct
func init()
func (m *user) tablename() string
// 通過使用者id獲取使用者資訊及使用者所屬的角色
func getuserbyid(id int64) (v *user, err error)
if err = o.querytable(new(user)).filter("id",id).relatedsel().one(v); err == nil
return v, nil
}return nil, err
}
角色模型
type role struct
func init()
func (m *role) tablename() string
使用者角色關係模型
type roleuser struct
func init()
func (m *roleuser) tablename() string
最後在控制器中
...
func (c *usercontroller) getone() else
c.servejson()
}...
假如getone()
對應的url是localhost:8080/v1/user/:id
請求http://localhost"8080/v1/user/1
時,返回的資料
,,]
}
beego ORM 所有多對多關係查詢
示例models中,article與category為多對一關係,article與tag是多對多關係。type article struct type tag struct type category struct 假設瀏覽器請求文章目錄資訊,伺服器需要返回的資訊格式如下,也就是說對查詢到的arti...
Hibernate多對多查詢
乙個老師教許多學生,乙個學生被許多老師教,乙個學生有好多書,同一種書被許多同學擁有.要查詢教擁有書 a 的學生的老師 hql如何寫呀?如何取值?classteacher classstudent classbook hql語句 select t from teacher t join t.stude...
mybatis 多對多查詢
查詢使用者及使用者購買商品資訊。查詢主表是 使用者表 user 關聯表 由於使用者和商品沒有直接關聯,通過訂單和訂單明細進行關聯,所以關聯表是 orders orderdetail items select orders.order表的唯一標識 user表的唯一標識 user.username,us...