类型接口如何与 GORM 配合使用?

How does the type interface work with GORM?

提问人:kamil 提问时间:11/1/2023 更新时间:11/1/2023 访问量:40

问:

我有一个名为:Invoice

type Invoice interface {
    GetTransactions() ([]Transaction, error)
}

type DebitInvoice struct { 
    gorm.Model
    ClientID uint  `json:"client_id"`
    Client   Store `json:"client"`
    Debt     uint  `json:"debt"` //REMAINING PAYMENT
}

func (d DebitInvoice) GetTransactions() ([]Transaction, error) {
    // process
    return transactions, nil
}

type CreditInvoice struct { //PEMBELIAN
    gorm.Model
    InvoiceCreditID string `json:"invoice_credit_id"`
    StoreID         uint   `json:"store_id"`
    Store           Store  `json:"store"`
    Debt            uint   `json:"debt"` //REMAINING PAYMENT
}

func (c CreditInvoice) GetTransactions() ([]Transaction, error) {
    // process
    return transactions, nil
}

正如你所看到的,和 是因为它实现了 .DebitInvoiceCreditInvoiceInvoiceGetTransactions()([]Transactions, error)

我有这种模型(在结构中),我们使用接口作为字段之一Invoice

type Transaction struct {
    gorm.Model
    InventoryID uint      `json:"inventory_id"`
    Inventory   Inventory `json:"inventory"`
    InvoiceID   uint      `json:"invoice_id"`
    InvoiceType string    `json:"invoice_type"` //Credit/Debit (Out/In)
    Invoice     Invoice   `json:"invoice"`
    TotalPrice  uint      `json:"total_price"`
    Discount    uint      `json:"discount"`
}

但是当我使用 GORM AutoMigrate 迁移它时。它不起作用,它显示并且没有创建表unsupported data type: program_akuntansi/models.Invoicetransactions

我对模型的期望是:Transaction

  • Invoice字段将为各自的表创建新记录
  • InvoiceType字段是发票创建的表的名称
  • InvoiceIDfield 是表中记录的 IDInvoiceType

但这些都不起作用

所以回到我的问题,接口类型如何与 GORM 一起使用,我如何修复我的代码?

接口 grails-orm go-gorm go-interface

评论

0赞 Trock 11/1/2023
你不能这么做。1:拆分为两个模型。2:使用字符串类型,然后实现 Getter,根据 进行 json 解码并返回具体结构。例子InvoiceType

答: 暂无答案