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

PHPz
Lepaskan: 2024-02-08 22:15:08
ke hadapan
606 orang telah melayarinya

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

mytable.go:

package models

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

func (fmap *Usertable) TableName() string { return "usertable" }
Salin selepas log masuk

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

}
Salin selepas log masuk

Takrif jadual:

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

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

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

}
Salin selepas log masuk

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

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!