Melaksanakan perhubungan dengan tatasusunan nilai dalam Gorm

WBOY
Lepaskan: 2024-02-09 08:48:09
ke hadapan
697 orang telah melayarinya

在 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"`
}
Salin selepas log masuk

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"`
}
Salin selepas log masuk

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
Salin selepas log masuk

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
     }
    Salin selepas log masuk
  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
     }
    Salin selepas log masuk
  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
     }
    Salin selepas log masuk

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

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan