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

WBOY
Lepaskan: 2024-02-09 11:15:28
ke hadapan
925 orang telah melayarinya

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

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

Kemudian buat siaran menggunakan tag ini:

post := models.post{
       ...,
       tags: posttags 
}]

dbi.create(&post)
Salin selepas log masuk

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

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

Ini yang saya lakukan:

post := models.Post {
        // Other fields (AuthorID, MarkdownUploadURL, Title)
}

dbi.Create(&post)

dbi.Model(&post).Omit("Tags.*").Association("Tags").Append(postTags)
Salin selepas log masuk

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!

Label berkaitan:
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