我有两个表,我试图找出一种方法来获得Order表中Ordered列的SUM,当查询Product表并显示每个单独的产品时。
这就是我目前获得所有产品的方式,我想扩展它,在查询时计算字段,或者如果可能的话使用PostgreSQL生成的列函数。我想我不确定它是否可以在这种情况下使用外键。
type Product struct {
gorm.Model
Orders []Order `gorm:"ForeignKey:ProductID" json:"orders"`
}
type Order struct {
gorm.Model
ProductID uint `json:"productID"`
Ordered int8 `gorm:"default:0" json:"ordered"`
}
func GetProducts(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
var products []Product
db.Preload("Orders").Find(&products)
json.NewEncoder(w).Encode(products)
}
我认为SQL查询是沿着这些线(不懂很多SQL)
select *, ( select sum(ordered) from orders where product_id = products.id) ordered from products;
我用下面的方法解决了这个问题。
func GetProducts(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
var products []Product
subQuery := db.Select("SUM(ordered) as ordered").Where("product_id = products.ID").Table("orders")
db.Select("*, (?)", subQuery).Preload("Orders").Find(&products)
json.NewEncoder(w).Encode(products)
}