Maison > développement back-end > Golang > le corps du texte

Le préchargement Gorm donne une erreur de colonne ambiguë

王林
Libérer: 2024-02-10 19:12:07
avant
563 Les gens l'ont consulté

Gorm 预加载给出了不明确的列错误

L'éditeur PHP Zimo vous présente l'erreur de liste ambiguë dans le préchargement de Gorm. Gorm est une bibliothèque ORM couramment utilisée dans le langage Go pour implémenter des opérations de base de données. Lorsque vous utilisez Gorm pour le préchargement, vous rencontrez parfois des erreurs de colonne ambiguës. La raison de cette erreur peut être que la structure de la table de base de données n'est pas cohérente avec la définition du modèle Gorm ou que le nom de colonne de la table d'association préchargée est incorrect. La solution à ce problème consiste à vérifier la structure de la table de base de données et la définition du modèle Gorm pour s'assurer qu'elles sont cohérentes, et à revérifier que les noms de colonnes de la table d'association préchargés sont corrects. En résolvant cette erreur, vous pouvez utiliser Gorm avec succès pour les opérations de préchargement et améliorer l'efficacité du fonctionnement de la base de données.

Contenu de la question

J'ai la structure suivante

type employee struct {
    employeeid        int64  `gorm:"primary_key;column:employee_id"`
    employeecode      string `gorm:"column:employee_code"`
    firstname         string `gorm:"column:first_name"`
    lastname          string `gorm:"column:last_name"`
    designationid     int64  `gorm:"column:designation_id;"`
    designation       *designation `gorm:"foreignkey:designationid"`
}

type designation struct {
    designationid   int64  `gorm:"primary_key;column:designation_id"`
    designationname string `gorm:"column:designation_name"`
}

func getemployee(id int64) (*employee, error) {
    db := connection.getconn() //get connection
    defer db.close()

    employee := &employee{}
    err := db.model(employees).preload("designation", func(db *gorm.db) *gorm.db {
        return db.join("inner join employees on employees.designation_id = designations.id").order("employees.first_name desc")
    }).find(employee).error
    return employee, err
}
Copier après la connexion

La requête générée est

SELECT * FROM employees;
SELECT * FROM designations INNER JOIN employees ON employees.designation_id = designations.id WHERE id IN (1,2) order by employees.first_name DESC;
Copier après la connexion

J'ai une connexion similaire à ce que j'ai écrit dans la fonction ci-dessus. Ici, je n'arrive pas à me connecter correctement, mais dans le cas réel, je sais que je dois me connecter, et il y a id champs à la fois dans la table de préchargement et dans la table de jointure. Puisque les deux tables ont les mêmes noms de colonnes, c'est-à-dire id dans ce cas, MySQL générera une erreur

错误1052:where子句中的列“id”不明确

J'ai ce problème dans gorm v1.9.16

Je n'ai trouvé aucune ressource mentionnant un problème similaire. Comment pouvons-nous résoudre ce problème ?

Solution

Pouvez-vous essayer d'utiliser la dernière version (> v1.20.x) ?

Ce numéro est closhttps://github.com/go-gorm/gorm/issue/2653

Ce problème semble être résolu dans la nouvelle versionhttps://github.com/go-gorm/gorm/commit/2ae0653af2bc19cd31f687e797b189c85f0ac3f6

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal