一对多插入

huangapple go评论81阅读模式
英文:

One to many inserting

问题

人们通常如何处理这种情况?是否有一种快速使用sqlboiler的方法来实现这个需求?

在处理这种情况时,人们通常会执行以下步骤:

  1. 解析请求中的JSON数据,获取订单和订单项的信息。
  2. 首先,将订单信息插入到数据库中,并获取生成的订单ID。
  3. 然后,使用订单ID将每个订单项与订单关联起来,并将订单项插入到数据库中。

使用sqlboiler可以简化这个过程。你可以按照以下步骤进行操作:

  1. 根据Order和OrderItem的结构体定义,使用sqlboiler生成相应的模型代码。
  2. 解析请求中的JSON数据,将其映射到Order和OrderItem的结构体对象中。
  3. 首先,使用sqlboiler的Create方法将订单信息插入到数据库中。
  4. 获取生成的订单ID。
  5. 遍历订单项列表,为每个订单项设置订单ID,并使用sqlboiler的Create方法将订单项插入到数据库中。

这样,你就可以通过一次请求将订单和订单项的信息插入到数据库中了。

英文:

I have two models: Order and OrderItem. I need to insert order and item of it from same request, e.g.:

{
    "user_id": "1",
    "total_price": "200",
    "items": [
        {
            "product_id": 1,
            "quantity": 10
        },
        {
            "product_id": 2,
            "quantity": 5
        },
        {
            "product_id": 3,
            "quantity":3
        }
    ]
}

This is Order and OrderItem model

=========================== Order ===========================
type Order struct {
	ID          int       `boil:"id" json:"id" toml:"id" yaml:"id"`
	OrderNumber string    `boil:"order_number" json:"order_number" toml:"order_number" yaml:"order_number"`
	OrderDate   time.Time `boil:"order_date" json:"order_date" toml:"order_date" yaml:"order_date"`
	Status      string    `boil:"status" json:"status" toml:"status" yaml:"status"`
	Note        string    `boil:"note" json:"note" toml:"note" yaml:"note"`
	UserID      int       `boil:"user_id" json:"user_id" toml:"user_id" yaml:"user_id"`
	CreatedAt   time.Time `boil:"created_at" json:"created_at" toml:"created_at" yaml:"created_at"`
	UpdatedAt   time.Time `boil:"updated_at" json:"updated_at" toml:"updated_at" yaml:"updated_at"`

	R *orderR `boil:"-" json:"-" toml:"-" yaml:"-"`
	L orderL  `boil:"-" json:"-" toml:"-" yaml:"-"`
}

=========================== OrderItem ===========================
type OrderItem struct {
	ID           int       `boil:"id" json:"id" toml:"id" yaml:"id"`
	OrderID      int       `boil:"order_id" json:"order_id" toml:"order_id" yaml:"order_id"`
	ProductID    int       `boil:"product_id" json:"product_id" toml:"product_id" yaml:"product_id"`
	ProductPrice float64   `boil:"product_price" json:"product_price" toml:"product_price" yaml:"product_price"`
	ProductName  string    `boil:"product_name" json:"product_name" toml:"product_name" yaml:"product_name"`
	Quantity     int       `boil:"quantity" json:"quantity" toml:"quantity" yaml:"quantity"`
	Discount     float64   `boil:"discount" json:"discount" toml:"discount" yaml:"discount"`
	Note         string    `boil:"note" json:"note" toml:"note" yaml:"note"`
	CreatedAt    time.Time `boil:"created_at" json:"created_at" toml:"created_at" yaml:"created_at"`
	UpdatedAt    time.Time `boil:"updated_at" json:"updated_at" toml:"updated_at" yaml:"updated_at"`

	R *orderItemR `boil:"-" json:"-" toml:"-" yaml:"-"`
	L orderItemL  `boil:"-" json:"-" toml:"-" yaml:"-"`
}

What do people usually do? Is there a way to do this quickly with sqlboiler?

答案1

得分: 2

我认为你不需要这样做,你可以将订单模型和订单项模型分别插入不同的请求中。这种解决方案为客户提供了更多的选择。如果你需要更新或添加新的订单项到订单中,你也需要使用这个API来解决。

英文:

I think you needn't to do that, you can insert order model and orderItems model in different requests. This solution provide more option than for client. If you need to update or add new order item into the order, you also need this API to solve it.

答案2

得分: 1

创建一些模型,如下所示:

type OrderItemInput struct {
    ProductId int `json:"product_id"`
    Quantity  int `json:"quantity"`
}

type OrderInsertInput struct {
    UserID      int        `json:"user_id"`
    TotalPrice  float64    `json:"total_price"`
    Items []OrderItemInput `json:"items"`
}

通过OrderInsertInput的字段UserIdTotalPrice创建新的订单。

当有OrderID时,我们将使用每个OrderItemInputOrderID创建OrderItem

英文:

Create some models like

type OrderItemInput struct {
    ProductId int `json:"product_id"`
    Quantity  int `json:"quantity"`
}

type OrderInsertInput struct {
    UserID      int        `json:"user_id"`
    TotalPrice  float64    `json:"total_price"`
    Items []OrderItemInput `json:"items"`
}

Create new Order by fields UserId and TotalPrice of OrderInsertInput.

When there was OrderID, we will create OrderItem with each OrderItemInput and the OrderID.

huangapple
  • 本文由 发表于 2022年8月1日 11:18:31
  • 转载请务必保留本文链接:https://go.coder-hub.com/73188526.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定