英文:
How to do joins in PostgreSQL using ozzo-dbx package?
问题
我正在使用Go语言创建REST API,并且希望在请求时发送包含对象数据和另一个表中的一些子数据的响应。基本上是在表之间进行JOIN操作。
我正在使用这个包:https://github.com/go-ozzo/ozzo-dbx
。
在文档中,我没有找到JOIN的示例。
你能帮我解决这个问题吗?
我的代码:
这是一个简单的SELECT * FROM cars
查询:
func (dao *BikesDAO) Query(rs app.RequestScope, offset, limit int) ([]models.Bikes, error) {
bikes := []models.Bikes{}
err := rs.Tx().Select().OrderBy("name").Offset(int64(offset)).Limit(int64(limit)).All(&bikes)
return bikes, err
}
我的结构体:
type Bikes struct {
Id int `json:"id" db:"id"`
Name string `json:"name" db:"name"`
Rating float64 `json:"rating" db:"rating"`
PriceValue uint `json:"price_value" db:"price_value"`
Users Users
}
type Users struct {
Id string `json:"id" db:"id"`
Username string `json:"username" db:"username"`
Name string `json:"name" db:"name"`
Phone string `json:"phone" db:"phone"`
Email string `json:"email" db:"email"`
}
我想要执行SELECT * FROM cars INNER JOIN users ON cars.user_id = users.id
,并获得以下结果:
{
"id": 12,
"name": "Toyota",
"rating": 4,
"price_value": 4000,
"users": {
"id": 64,
"Username": "Tom32",
"Name": "Tom",
"Phone": "325345345",
"Email": "tom@gmail.com"
}
}
英文:
I am creating REST API in Go. And I want on request send the response with data about the object + some subdata about it which is another table. So basically do JOIN between tables.
I am using this package: https://github.com/go-ozzo/ozzo-dbx
.
In the documentation, I failed to find JOIN examples.
Could you help me to solve this?
My code:
This does simple SELECT * FROM cars
func (dao *BikesDAO) Query(rs app.RequestScope, offset, limit int) ([]models.Bikes, error) {
bikes := []models.Bikes{}
err := rs.Tx().Select().OrderBy("name").Offset(int64(offset)).Limit(int64(limit)).All(&bikes)
return bikes, err
}
My structs:
type Bikes struct {
Id int `json:"id" db:"id"`
Name string `json:"name" db:"name"`
Rating float64 `json:"rating" db:"rating"`
PriceValue uint `json:"price_value" db:"price_value"`
Users Users
}
type Users struct {
Id string `json:"id" db:"id"`
Username string `json:"username" db:"username"`
Name string `json:"name" db:"name"`
Phone string `json:"phone" db:"phone"`
Email string `json:"email" db:"email"`
}
With this I want to do SELECT * FROM cars INNER JOIN users ON cars.user_id = users.id
and get the following result:
{
"id":12,
"name":"Toyota",
"rating":4,
"price_value":4000,
"users": {
"id":64,
"Username":"Tom32",
"Name":"Tom",
"Phone":"325345345",
"Email":"tom@gmail.com"
}
}
答案1
得分: 1
在对dbx包的代码进行一些挖掘后,我发现它非常简单:
err := rs.Tx().Select().InnerJoin("table2", dbx.NewExp("table2.id = table1.id").OrderBy("name").Offset(int64(offset)).Limit(int64(limit)).All(&bikes)
英文:
After some digging in dbx package code I have found that it's quite easy:
err := rs.Tx().Select().InnerJoin("table2", dbx.NewExp("table2.id = table1.id").OrderBy("name").Offset(int64(offset)).Limit(int64(limit)).All(&bikes)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论