# gf-example **Repository Path**: golang520/gf-example ## Basic Information - **Project Name**: gf-example - **Description**: gf-examplegf-examplegf-examplegf-example - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-12-18 - **Last Updated**: 2024-11-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 一对多查询 > 下面 `with`关键字注释请耐心看完.`等号前面`是从表结构结构体中关联id,`等号后面`是主表中的主键id, > 注意两个id都必须是以`数据库表中字段名`为准 ```go type HasToMany struct { g.Meta `orm:"table:boyfriend"` BoyfriendId uint64 `json:"boyfriendId" dc:"男朋友表中主键id"` Name string `json:"name" dc:"男朋友名字"` Age int `json:"age" dc:"年龄"` //orm:"with:girlfriend_id=boyfriendId" 这局话中,Girlfriend结构体,也就是girlfriend这张表中的关联girlfriend_id要在with后面, //注意注意这个girlfriend_id后面的girlfriend_id一定是以从表中的字段名字为准,而不是乱七八糟的驼峰命名为准... //等号后面是当前主表,也就是主结构体HasToHas中的主键id,同理也是以从表中的关联id字段名为准,而不是驼峰命名 Girlfriend []*Girlfriends `json:"girlfriend" orm:"with:girlfriend_id=boyfriend_id"` } type Girlfriends struct { g.Meta `orm:"table:girlfriend"` Id uint64 `json:"id" dc:"女朋友表中主键id"` Name string `json:"name" dc:"女朋友名字"` Age int `json:"age" dc:"年龄"` GirlfriendId uint64 `json:"girlfriendId" dc:"关联男朋友表"` } ``` #### 上面只是查询的一对多,从表中无任何条件,如果需要加入条件的话,就得按照下面这种写法. > 注意下面这种写法的话,一个`空格`,一个`逗号`都不能少的.否者就会出错 ```go Girlfriend []*Girlfriends `json:"girlfriend" orm:"with:girlfriend_id=boyfriend_id, where:age>20 and age<30, order:id desc"` ``` ### 多对多查询 > 其实跟一对多查询差不多,只是他讲男朋友表中的主键id,和女朋友表中的主键id,提取出来后, > 然后插入到一张中间表中来关联,以形成对多对, > 比如下面查询出来的就是张无忌同时拥有女朋友小昭,赵敏,周芷若, > 而周芷若也同时拥有多个男朋友,例如周芷若同时拥有张无忌和宋青书这2个男朋友 ```go // Boyfriend 主表 type Boyfriend struct { g.Meta `orm:"table:boyfriend"` BoyfriendId uint64 `json:"boyfriendId" dc:"男朋友表中主键id"` Name string `json:"name" dc:"男朋友名字"` Age int `json:"age" dc:"年龄"` // 注意:前面讲的一对多的时候,这里`with`后面跟的是从表的主键id,而这里不是了,这里是中间表的关联当前表的这个idboyfriend_id..切记切记 BoyfriendGirlfriend []*BoyfriendGirlfriend `json:"boyfriendGirlfriend" orm:"with:boyfriend_id=boyfriend_id"` } // BoyfriendGirlfriend 中间表 type BoyfriendGirlfriend struct { g.Meta `orm:"table:boyfriend_girlfriend"` Id uint64 `json:"id" dc:"这是中间表的主键id"` BoyfriendId int64 `json:"boyfriendId" dc:"注意这是boyfriend表中的主键id"` GirlfriendId int64 `json:"girlfriendId" dc:"注意这是girlfriend表中的主键id"` Girlfriendss []*Girlfriendss `json:"girlfriendss" orm:"with:id=girlfriend_id"` } // Girlfriendss 主表 type Girlfriendss struct { g.Meta `orm:"table:girlfriend"` Id uint64 `json:"id" dc:"女朋友表的主键id"` Name string `json:"name" dc:"女朋友名字"` Age int `json:"age" dc:"年龄"` GirlfriendId uint64 `json:"girlfriendId" dc:"关联男朋友表"` } ```