Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Melaksanakan perhubungan dengan tatasusunan nilai dalam Gorm

Melaksanakan perhubungan dengan tatasusunan nilai dalam Gorm

WBOY
WBOYke hadapan
2024-02-09 08:48:09685semak imbas

在 Gorm 中实现与值数组的关系

Melaksanakan perhubungan dengan tatasusunan nilai adalah ciri yang sangat berguna dalam Gorm. Gorm ialah perpustakaan ORM (Object Relational Mapping) bahasa Go yang popular yang membenarkan pembangun menggunakan bahasa Go untuk mengendalikan pangkalan data. Tidak seperti pangkalan data hubungan tradisional, tatasusunan nilai ialah struktur data khas yang membolehkan berbilang nilai disimpan secara keseluruhan dalam medan dalam pangkalan data. Ini sangat membantu untuk menyimpan beberapa struktur data yang kompleks atau meningkatkan kecekapan pertanyaan. Dalam artikel ini, saya akan memperkenalkan anda tentang cara melaksanakan perhubungan dengan tatasusunan nilai dalam Gorm dan cara menggunakannya untuk meningkatkan kecekapan pembangunan.

Kandungan soalan

Saya cuba melaksanakan model untuk aplikasi invois menggunakan go and gorm. Saya telah menentukan struktur invois dan ingin memasukkan item baris invois daripada struktur yang berasingan.

type invoice struct {
    base
    companyid  string `gorm:"not null"`
    company    company
    invoiceno  string     `gorm:"not null"`
    currency   string     `gorm:"not null;default:'gbp'"`
    total      float64    `gorm:"not null"`
    terms      int        `gorm:"not null;default:30"`
    issueddate time.time  `gorm:"not null"`
    duedate    time.time  `gorm:"not null"`
    paid       bool       `gorm:"not null"`
    lineitems  []lineitem `gorm:"foreignkey:invoiceid"`
    void       bool       `gorm:"default:false"`
}

Ini adalah struktur item baris saya.

type lineitem struct {
    base
    service     string `gorm:"not null"`
    description string `gorm:"not null;"`
    amount      float64
    count       int
    unitbase    string  `gorm:"not null;default:'days'"` // days or hours
    total       float64 `gorm:"not null"`
}

Apabila saya cuba membina apl, saya mendapat ralat berikut.

... got error invalid field found for struct github.com/repo/API/database/models.Invoice's field LineItems: define a valid foreign key for relations or implement the Valuer/Scanner interface

Ideanya ialah saya boleh menentukan item baris tetapan terhad yang boleh memilih daripada kadar tetap dan perihalan untuk mengehadkan pertindihan.

Saya tidak pasti sama ada saya melakukannya dengan cara yang betul.

Jadi persoalan saya ialah, adakah mungkin untuk memasukkan tatasusunan item dalam model hubungan dengan cara ini?

Penyelesaian

Berdasarkan nama lajur anda, saya boleh memikirkan tiga cara untuk mencapai ini:

  1. Gunakan sintaks lalai (tanpa gorm:foreignkey)

    type invoice struct {
         id     //this is the primary key, may also be in your base model
         lineitems []lineitem
         ..other fields
     }
    
     type lineitem struct {
         id          //primary key of lineitem
         invoiceid   //automatically this will be your foreign key
         ..other fields
     }
  2. Nyatakan kunci asing tersuai (dengan andaian struct kedua mempunyai nama lajur berbeza yang anda mahu gunakan sebagai kunci asing)

    type invoice struct {
         id     //this is the primary key, may also be in your base model
         lineitems []lineitem `gorm:"foreignkey:parentid"`
         ..other fields
     }
    
     type lineitem struct {
         id          //primary key of lineitem
         parentid   //this is the custom column referencing invoice.id
         ..other fields
     }
  3. Atau kedua-dua struktur mempunyai nama lajur yang berbeza

    type Invoice struct {
         ID     //this is the primary key, may also be in your base model
         InvoiceNum 
         Lineitems []LineItem `gorm:"foreignKey:ParentNum;references:InvoiceNum"`
         ..other fields
     }
    
     type LineItem struct {
         ID          //primary key of LineItem
         ParentNum   //this is now referencing Invoice.InvoiceNum
         ..other fields
     }

Atas ialah kandungan terperinci Melaksanakan perhubungan dengan tatasusunan nilai dalam Gorm. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Memaparkan .gif dalam GoArtikel seterusnya:Memaparkan .gif dalam Go