没有这样的专栏,SQLite GORM

No such column, SQLite GORM

以下是流派模型的结构:

type Genre struct {
    ImageId   int
    GenreType string
}

我正在执行以下查询以查找 ImageId 的所有 genreType。代码如下:

func getGenresOfImage(DB *gorm.DB, w http.ResponseWriter, imageId int) ([]string, error) {
    var genres []string
    var allGenres []models.Genre
    genresOfCurrentImage := DB.Where("ImageId = ?", strconv.Itoa(imageId)).Find(&allGenres)
    genreRows, err := genresOfCurrentImage.Rows()
    if err != nil {
        SendErrorResponse(w, http.StatusInternalServerError, err.Error())
        // error is returned here
        return genres, err
    }
    

我收到以下错误:

Images.go:46 no such column: ImageId
[0.908ms] [rows:0] SELECT * FROM `genres` WHERE ImageId = "1"

我在查找与 imageId 关联的所有类型时使用的语法是否错误?感谢您的帮助!

您的列名称很可能是 image_id

正如 gorm 文档所说:

Column db name uses the field’s name’s snake_case by convention.

当您使用 gorm 的自动迁移功能时,表将以这种方式生成。

有关更多信息,请参阅:https://gorm.io/docs/conventions.html#Column-Name

如果您查看默认命名策略 here,您会发现查询中需要 image_id 列名称(假设 image_id 是您的列名称在数据库中)。

考虑到这一点,您可以尝试的选项很少:

Where方法中使用image_id

DB.Where("image_id = ?", strconv.Itoa(imageId)).Find(&allGenres)

使用struct将条件传递给Where方法:

DB.Where(&models.Genre{ ImageID: imageId}).Find(&allGenres) 

或者,如果您在数据库中的列实际命名为 ImageId,您可以将其添加到 models.Genre 结构中:

type Genre struct {
 // other fields
 ImageID int `gorm:"column:ImageId"`
}