Rumah >pembangunan bahagian belakang >Golang >db.Model(&Userable).Create(data): Bagaimana untuk menghantar nama jadual yang betul?

db.Model(&Userable).Create(data): Bagaimana untuk menghantar nama jadual yang betul?

PHPz
PHPzke hadapan
2024-02-08 22:15:08636semak imbas

db.Model(&Userable).Create(data): Bagaimana untuk menghantar nama jadual yang betul?

Apabila menggunakan Golang untuk operasi pangkalan data, kami sering menggunakan kod seperti `db.Model(&Userable).Create(data)` untuk mencipta data baharu. Walau bagaimanapun, kadangkala kita mungkin menghadapi masalah: bagaimana untuk menghantar nama jadual yang betul? Dalam artikel ini, editor PHP Youzi akan menjawab soalan ini secara terperinci untuk membantu pembaca lebih memahami cara menghantar nama jadual dengan betul untuk operasi pangkalan data yang lancar.

Kandungan soalan

Saya cuba memasukkan baris ke dalam jadual yang ditakrifkan sebagai model. Berikut ialah coretan kod yang berkaitan:

Struktur pakej:

gorm
|- server
   |- insertRow.go
|- pkg
   |- models
      |- mytable.go
   |- database
      | - connectdb.go

mytable.go:

package models

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

func (fmap *Usertable) TableName() string { return "usertable" }

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")
        }

}

Takrif jadual:

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

Ralat berikut akan berlaku semasa melaksanakan insertRow.go:

(/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>}

Nama jadual dalam arahan sisip nampaknya kosong, sila beritahu saya apa yang salah dengan arahan sisip saya dan bagaimana saya boleh menghantar nama jadual yang betul kepada panggilan Cipta.

Saya juga mencubanya dengan hasil yang sama:

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")
    }

}

Penyelesaian

Anda menyediakan peta[rentetan]antaramuka{} untuk disisipkan, tetapi gorm menjangkakan akan diluluskan struct

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

result := db.DB.Debug().Create(&user)

Atas ialah kandungan terperinci db.Model(&Userable).Create(data): Bagaimana untuk menghantar nama jadual yang betul?. 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