php-Editor Strawberry erklärt Ihnen, wie Sie eine Assoziation erstellen, wenn die Assoziation nicht existiert. Beim Programmieren müssen wir häufig assoziative Arrays verwenden, um Daten zu speichern und zu bearbeiten. Aber manchmal müssen wir eine neue Assoziation im assoziativen Array erstellen, aber wir wollen die bestehende Assoziation nicht überschreiben. Zu diesem Zeitpunkt können wir dies mithilfe einer bedingten Beurteilung erreichen und nur dann eine neue Assoziation erstellen, wenn die Assoziation nicht vorhanden ist. Diese Methode kann die Integrität und Genauigkeit von Daten sicherstellen und die Lesbarkeit und Wartbarkeit von Code verbessern. Werfen wir einen Blick auf die spezifische Implementierungsmethode.
Ich durchlaufe ein Array von Zeichenfolgen, um ein Dokument mit diesem Attribut zu erstellen (nur wenn das Attribut nicht vorhanden ist):
(dbi: meine Gorm-Datenbankinstanz)
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) }
Dann erstellen Sie einen Beitrag mit diesen Tags:
post := models.post{ ..., tags: posttags }] dbi.create(&post)
Modell:
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"` }
Ich habe versucht: konvertieren dbi.firstorcreate()
更改为 dbi.first()
,然后检查 errors.is(err, gorm.errrecordnotfound
Aber jedes Mal, wenn ich die Funktion aufrufe, erhalte ich andere Tags mit unterschiedlichen IDs, obwohl sie bereits in der Datenbank vorhanden sind...
Behoben. Anstatt Ihrem Beitrag ein Tag hinzuzufügen, gehen Sie wie folgt vor:
post := models.post{ tags: posttags, } dbi.create(&post)
Das habe ich getan:
post := models.Post { // Other fields (AuthorID, MarkdownUploadURL, Title) } dbi.Create(&post) dbi.Model(&post).Omit("Tags.*").Association("Tags").Append(postTags)
Referenz: https://github.com/go-gorm/gorm/issues/3605
Das obige ist der detaillierte Inhalt vonWie kann man eine Assoziation nur dann erstellen, wenn die Assoziation nicht existiert? (gorm). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!