Maison  >  Article  >  développement back-end  >  Le préchargement Gorm donne une erreur de colonne ambiguë

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

王林
王林avant
2024-02-10 19:12:07564parcourir

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
}

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;

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer