Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk membuat persatuan hanya jika ia tidak wujud? (gorm)

Bagaimana untuk membuat persatuan hanya jika ia tidak wujud? (gorm)

WBOY
WBOYke hadapan
2024-02-09 11:15:28882semak imbas

仅当关联不存在时如何创建关联? (戈尔姆)

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.

Kandungan soalan

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...

Penyelesaian

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam