beego orm 多對多查詢

2021-09-13 02:24:58 字數 2115 閱讀 6618

首先糾正一下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...