db.Model(&Usertable).Create(data): Wie übergebe ich den richtigen Tabellennamen?

PHPz
Freigeben: 2024-02-08 22:15:08
nach vorne
609 Leute haben es durchsucht

db.Model(&Usertable).Create(data): Wie übergebe ich den richtigen Tabellennamen?

Wenn wir Golang für Datenbankoperationen verwenden, verwenden wir häufig Code wie „db.Model(&Usertable).Create(data)“, um neue Daten zu erstellen. Manchmal stoßen wir jedoch auf ein Problem: Wie übergibt man den richtigen Tabellennamen? In diesem Artikel wird der PHP-Editor Youzi diese Frage ausführlich beantworten, um den Lesern zu helfen, besser zu verstehen, wie der Tabellenname für einen reibungslosen Datenbankbetrieb korrekt übergeben wird.

Frageninhalt

Ich versuche, eine Zeile in eine als Modell definierte Tabelle einzufügen. Hier sind die relevanten Codeausschnitte:

Paketstruktur:

gorm
|- server
   |- insertRow.go
|- pkg
   |- models
      |- mytable.go
   |- database
      | - connectdb.go
Nach dem Login kopieren

mytable.go:

package models

type Usertable struct {
    Firstname    string `gorm:"column:firstname"`
    Lastname  string `gorm:"column:lastname"`
}

func (fmap *Usertable) TableName() string { return "usertable" }
Nach dem Login kopieren

insertRow.go

package main
import (
        "fmt"
       "gorm/pkg/models"
        "gorm/pkg/database"
)

func  main() {
  params := map[string]interface{} {
        "Firstname" : "MyFirstName",
        "Lastname" : "LastName" ,
 }
        db, _ := database.NewStorage("postgres", "testdb")

        var user models.Usertable

        err := db.DB.Debug().Model(&user).Create(params)
        if err != nil {
                fmt.Println("Error :=", err)
        } else {
                fmt.Println("Success")
        }

}
Nach dem Login kopieren

Tabellendefinition:

testdb=# \d+ usertable
                                 Table "public.usertable"
  Column   | Type | Collation | Nullable | Default | Storage  | Stats target | Description
-----------+------+-----------+----------+---------+----------+--------------+-------------
 firstname | text |           |          |         | extended |              |
 lastname  | text |           |          |         | extended |              |
Nach dem Login kopieren

Der folgende Fehler tritt beim Ausführen von insertRow.go auf:

(/root/gorm/cloudOps/server/testDB/insertRow.go:17)
[2023-09-23 23:51:26]  pq: zero-length delimited identifier at or near """"

(/root/gorm/cloudOps/server/testDB/insertRow.go:17)
[2023-09-23 23:51:26]  [0.45ms]  **INSERT INTO "" DEFAULT VALUES RETURNING "".***
[0 rows affected or returned ]
Error := &{{{0 0} 0 0 {{} 0} {{} 0}} map[Firstname:MyFirstName Lastname:LastName] pq: zero-length delimited identifier at or near """" 0 0xc0000a4b60 false 2 {0xc0001a3d60} 0xc0001e8420 {{0 0} {[] {} 0xc00021cc20} map[] 0} 0xc0000a4c30 <nil> 0xc0000a2c78 false <nil>}
Nach dem Login kopieren

Der Tabellenname im Einfügebefehl scheint leer zu sein. Bitte lassen Sie mich wissen, was mit meinem Einfügebefehl nicht stimmt und wie ich den richtigen Tabellennamen an den Create-Aufruf übergeben kann.

Ich habe es auch mit dem gleichen Ergebnis versucht:

package main
import (
    "fmt"
//       "gorm/pkg/models"
    "gorm/pkg/database"
    "gorm.io/gorm"
)

type Usertable struct {
    gorm.Model
    Firstname    string `gorm:"column:firstname"`
    Lastname  string `gorm:"column:lastname"`
}

func  main() {
  params := map[string]interface{} {
    "Firstname" : "MyFirstName",
    "Lastname" : "LastName" ,
 }
    db, _ := database.NewStorage("postgres", "testdb")


    err := db.DB.Debug().Model(&Usertable{}).Create(params)
    if err != nil {
        fmt.Println("Error :=", err)
    } else {
        fmt.Println("Success")
    }

}
Nach dem Login kopieren

Workaround

Sie haben eine Map[string]interface{} zum Einfügen eingerichtet, aber gorm erwartet, dass eine Struktur übergeben wird

user := models.Usertable{
    Firstname: "MyFirstName",
    Lastname:  "LastName",
}

result := db.DB.Debug().Create(&user)
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vondb.Model(&Usertable).Create(data): Wie übergebe ich den richtigen Tabellennamen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!