- 69
- 0
用户User
用户定单Order
想要实现
一个用户可以有N个订单,每个定单只能有一个用户
模型
type User struct {
Id int64
Name string
Order []*Order `orm:"reverse(many)"`
}
type Order struct {
Id int64
User *User `orm:"rel(fk)"`
CreatedAt time.Time
}
数据表:
user
| id | name |
|---|---|
| 1 | test |
| 2 | testbbbb |
order
| id | user_id(外键) | created_at |
|---|---|---|
| 1 | 1 | 2018-12-20 10:36:47 |
| 2 | 1 | 2018-12-20 10:38:09 |
| 3 | 1 | 2018-12-20 10:40:12 |
| 4 | 2 | 2018-12-20 10:47:52 |
按照上面设置
获取定单数据:
{
"Id":1,
"CreatedAt":"2018-12-20T10:36:47+08:00",
"User":{
"Id":1,
"Name":"test",
"Order":null
}
}
获取用户数据,然而,获取到Order的值是null。假如要获取某个用户获取的所有订单,是不是要通过业务逻辑处理?
{
"Id":1,
"Name":"test",
"Order":null
}
初始接触beego,文档看得我一脸懵逼!求指点!!
- 共 0 条
- 全部回答
-
振兴 普通会员 1楼
在Beego中,可以使用orm(Object-Relational Mapping)库来设置表关系。以下是一个简单的例子,假设我们有一个User和Role的模型,分别表示用户和角色,每个用户可以有多个角色,每个角色也可以有多个用户:
```go // User模型 type User struct { ID int Username string Password string Role Role }
// Role模型 type Role struct { ID int Name string Users []User }
// UserRole模型 type UserRole struct { UserID int RoleID int } ```
在这个例子中,User模型有一个ID字段,代表用户ID,Username字段代表用户名,Password字段代表密码,Role字段代表角色ID。Role模型有一个ID字段,代表角色ID,Name字段代表角色名称,Users字段是一个用户列表,包含所有与该角色相关的用户。UserRole模型有一个UserID和RoleID字段,分别代表用户ID和角色ID。
在配置orm的过程中,我们可以通过以下方式设置表关系:
- 在beego的main.go文件中引入orm库:
```go package main
import ( "database/sql" "fmt" "log" "github.com/go-sql-driver/mysql" "github.com/go-orm/orm" )
func main() { // 创建数据库连接 db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/database") if err != nil { log.Fatal(err) }
// 注册ORM库 err = orm.Register(&db) if err != nil { log.Fatal(err) } // 创建User模型 user := User{ID: 1, Username: "admin", Password: "password", Role: Role{ID: 1}} userRole := UserRole{UserID: 1, RoleID: 1} // 插入User模型到数据库 _, err = db.Exec("INSERT INTO `users`(`username`, `password`, `role`) VALUES (?, ?, ?)", user.Username, user.Password, userRole.Name) if err != nil { log.Fatal(err) } // 插入Role模型到数据库 _, err = db.Exec("INSERT INTO `roles`(`name`, `users`) VALUES (?, ?)", userRole.Name, userRole.Users) if err != nil { log.Fatal(err) } // 查询用户和角色关系 var result map[int]int err = db.QueryRow("SELECT `users`.ID, `users`.Username, `users`.Password, `roles`.ID, `roles`.Name FROM `users` JOIN `roles` ON `users`.ID = `roles`.UserID WHERE `users`.Name = ? AND `roles`.Name = ?", "admin", "admin", nil).Scan(&result) if err != nil { log.Fatal(err) } fmt.Println(result)} ```
在这个例子中,我们首先创建了一个数据库连接,然后注册了ORM库。然后,我们创建了User模型和Role模型,并在数据库中插入了两个用户和两个角色。接下来,我们查询了两个用户和两个角色的关系,结果是一个映射,其中每个用户对应一个角色,每个角色对应一个用户。最后,我们打印出了查询结果。
注意:这只是一个基本的例子,实际使用中可能需要根据你的具体需求和数据库表结构进行修改。例如,你可能需要处理更复杂的查询,或者处理插入和更新操作。此外,还需要处理用户和角色之间的关系,这可能需要使用子查询、JOIN操作或子查询和JOIN操作的组合等。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
