【发布时间】:2021-10-02 17:27:21
【问题描述】:
我正在使用 Golang (GORM) + Postgres。我正在尝试模拟一种业务情况,即卖家向买家出售商品,每个买家都创建一个订单交易。
我有一个 Order Gorm 模型,以及一个买方和卖方 Gorm 模型。买方和卖方已经是在数据库中创建的行。
一个买家有很多订单。
一个卖家有很多订单。
为了绘制这种关系,我相信我只是创建了相应的买方/卖方结构(标准 Gorm 模型),然后像这样创建一个 Order 结构:
type Order struct {
ID int64 `json:"ID"gorm:"primary_key;auto_increment:true"`
Buyer *Buyer `json:"Buyer"`
Seller *Seller `json:"Seller"`
// ... other data ...
}
我假设上面会自动创建关系,但我不完全确定。我可以用这个函数创建一个订单,并且返回正常:
func CreateOrder(buyer *entity.Buyer, seller *entity.Seller) (*entity.Order, error) {
order := &entity.Order{
User: buyer,
Sitter: seller,
// ... other data ...
}
db.Table("orders").Create(order)
return order
}
如果我使用 Postgres CLI,TABLE orders; 不会显示买家或卖家列。我希望有一列他们的 ID。所以这就是为什么我不确定这是否有效。 这本身肯定是个问题。
无论如何,我真正想要做的是能够检查当前是否存在买方/卖方的任何订单。但我真的不认为用 gorm 查询来做到这一点。我想在 SQL 中它会是这样的:
func FindOrder(buyer *entity.Buyer, seller *entity.Seller) {
db.Raw(`GET order FROM orders WHERE buyer = ?, seller = ?`, buyer, seller)
// OR this ???
db.Table("orders").First(buyer, buyer).First(seller, seller)
}
但我不知道有任何 Gorm 辅助函数可以真正做到这一点。我也希望这能有效,因为买家和卖家都有自己的 ID 主键。
我怎样才能像上面的例子那样根据买家/卖家找到订单?
作为替代方案,我正在考虑添加(买家 ID + 卖家 ID)来制作自定义订单 ID primary_key。不过,这似乎很老套,因为我觉得关系的全部意义在于,我不必做这样的事情。
【问题讨论】:
标签: database postgresql go orm go-gorm