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.
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?
Berdasarkan nama lajur anda, saya boleh memikirkan tiga cara untuk mencapai ini:
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 }
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 }
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!