从有很多

  • 本文关键字: go go-gorm
  • 更新时间 :
  • 英文 :


我有两个表,我试图找出一种方法来获得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)
}

相关内容

  • 没有找到相关文章

最新更新