editor php Strawberry akan menerangkan kepada anda cara membuat persatuan apabila persatuan itu tidak wujud. Dalam pengaturcaraan, kita selalunya perlu menggunakan tatasusunan bersekutu untuk menyimpan dan memanipulasi data. Tetapi kadangkala kita perlu mencipta persatuan baharu dalam tatasusunan bersekutu, tetapi kita tidak mahu menimpa perkaitan sedia ada. Pada masa ini, kita boleh menggunakan pertimbangan bersyarat untuk mencapai ini, dan hanya mencipta persatuan baharu apabila persatuan itu tidak wujud. Kaedah ini boleh memastikan integriti dan ketepatan data serta meningkatkan kebolehbacaan dan kebolehselenggaraan kod. Mari kita lihat kaedah pelaksanaan khusus.
Saya mengulangi tatasusunan rentetan untuk mencipta dokumen dengan atribut itu (hanya jika atribut itu tidak wujud):
(dbi: contoh pangkalan data gorm saya)
var posttags []models.tag for _, tagslug := range tagsarray { tag := models.tag{ slug: tagslug, } err = dbi.where("slug = ?", tagslug).firstorcreate(&tag).error if err != nil { return c.status(fiber.statusinternalservererror).json(fiber.map{ "error": "internal server error", }) } posttags = append(posttags, tag) }
Kemudian buat siaran menggunakan tag ini:
post := models.post{ ..., tags: posttags }] dbi.create(&post)
Model:
type Post struct { BaseModel Title string `json:"title"` MarkdownUploadURL string `json:"markdownUploadUrl"` AuthorID string `json:"authorId"` Tags []Tag `json:"tags" gorm:"many2many:posts_tags"` } type Tag struct { BaseModel Slug string `json:"slug"` }
Saya cuba: tukar dbi.firstorcreate()
更改为 dbi.first()
,然后检查 errors.is(err, gorm.errrecordnotfound
Tetapi setiap kali saya memanggil fungsi tersebut, saya mendapat tag yang berbeza dengan id yang berbeza, walaupun ia sudah wujud dalam pangkalan data...
Tetap. Daripada menambah tag pada siaran anda, seperti ini:
post := models.post{ tags: posttags, } dbi.create(&post)
Ini yang saya lakukan:
post := models.Post { // Other fields (AuthorID, MarkdownUploadURL, Title) } dbi.Create(&post) dbi.Model(&post).Omit("Tags.*").Association("Tags").Append(postTags)
Rujukan: https://github.com/go-gorm/gorm/issues/3605
Atas ialah kandungan terperinci Bagaimana untuk membuat persatuan hanya jika ia tidak wujud? (gorm). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!