Während des Entwicklungsprozesses tritt beim PHP-Editor Xinyi manchmal der Fehler „Untergeordnete Zeile kann nicht hinzugefügt oder aktualisiert werden – Fremdschlüsseleinschränkung bei Selbstreferenz fehlgeschlagen“ auf. Dieser Fehler tritt normalerweise auf, wenn in der Datenbank Selbstreferenzen vorhanden sind, beispielsweise ein Feld in einer Tabelle, das auf ein anderes Feld in der Tabelle verweist. Wenn in diesem Fall die Fremdschlüsseleinschränkung nicht korrekt konfiguriert ist, wird ein Fehler verursacht, der besagt, dass die untergeordnete Zeile nicht hinzugefügt oder aktualisiert werden kann. Als Nächstes stellen wir einige Methoden zur Lösung dieses Problems vor.
Ich habe eine Struktur wie diese:
type category struct { code *int `gorm:"unique;primarykey;"` parentcategory *category `gorm:"foreignkey:code"` }
Ich habe ein Array mit 4 Kategorien, wie oben erwähnt, die erste hat keine übergeordnete Kategorie. Wenn ich diese Kategorien nacheinander speichere (beginnend mit der ersten ohne parentcategory , erhalte ich diese Fehlermeldungen (drucken Sie einfach die ersten beiden hier aus):
Error 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`ps_product_service`.`categories`, CONSTRAINT `fk_categories_parent_category` FOREIGN KEY (`code`) REFERENCES `categories` (`code`)) [20.890ms] [rows:0] INSERT INTO `categories` (`code`) VALUES (0) RETURNING `code` Error when creating category: Error 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`ps_product_service`.`categories`, CONSTRAINT `fk_categories_parent_category` FOREIGN KEY (`code`) REFERENCES `categories` (`code`))&{Code:0x140003c6a00 ParentCategory:<nil>} 2023/06/19 21:31:44 Error 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`ps_product_service`.`categories`, CONSTRAINT `fk_categories_parent_category` FOREIGN KEY (`code`) REFERENCES `categories` (`code`)) [7.689ms] [rows:0] INSERT INTO `categories` (`code`) VALUES (99) RETURNING `code` Error when creating category: Error 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`ps_product_service`.`categories`, CONSTRAINT `fk_categories_parent_category` FOREIGN KEY (`code`) REFERENCES `categories` (`code`))&{Code:0x140003c6a20 ParentCategory:<nil>}
package main import ( "fmt" "github.com/samber/lo" "gorm.io/driver/postgres" "gorm.io/gorm" ) type category struct { code uint `gorm:"unique;primarykey;"` parentcategoryid *uint parentcategory *category `gorm:"foreignkey:parentcategoryid"` } func main() { dsn := "host=localhost port=54322 user=postgres password=postgres dbname=postgres sslmode=disable" db, err := gorm.open(postgres.open(dsn)) if err != nil { panic(err) } db.automigrate(&category{}) // load dummy data db.create(&category{ code: 1, parentcategoryid: nil, }) db.create(&category{ code: 2, parentcategoryid: lo.toptr[uint](1), }) db.create(&category{ code: 3, parentcategoryid: lo.toptr[uint](2), }) db.create(&category{ code: 4, parentcategoryid: lo.toptr[uint](1), }) // reading logic var categories []category if err := db.model(&category{}).find(&categories).error; err != nil { panic(err) } for _, v := range categories { if v.parentcategoryid == nil { fmt.printf("id: %v\tparentcategoryid: <nil>\n", v.code) continue } fmt.printf("id: %v\tparentcategoryid: %v\n", v.code, *v.parentcategoryid) } }
es sei denn, die Kategorie hat kein übergeordnetes Element. Wenn Sie versuchen, den vorherigen Code auszuführen, sollten Sie das folgende Ergebnis erhalten:
id: 1 parentCategoryId: <nil> id: 2 parentCategoryId: 1 id: 3 parentCategoryId: 2 id: 4 parentCategoryId: 1
Das obige ist der detaillierte Inhalt vonGorm: Untergeordnete Zeile kann nicht hinzugefügt oder aktualisiert werden – Fremdschlüsseleinschränkung schlägt bei Selbstreferenz fehl. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!