Maison >développement back-end >Golang >Comment changer le nom de la colonne de la table de résultats de 'many' à 'many' dans gorm

Comment changer le nom de la colonne de la table de résultats de 'many' à 'many' dans gorm

PHPz
PHPzavant
2024-02-10 13:45:081104parcourir

如何在 gorm 中将结果表的列名从“多”更改为“多”

Lors de l'utilisation de gorm pour les opérations de base de données, nous pouvons parfois avoir besoin de changer le nom de colonne de la table de résultats de "many" à "many". Cela peut rendre notre code plus clair et plus facile à lire et améliorer la maintenabilité du code. Alors, comment implémenter cette fonction dans gorm ? Dans cet article, l'éditeur PHP Strawberry partagera avec vous une méthode simple et efficace pour vous aider à modifier facilement les noms des colonnes du tableau des résultats.

Contenu de la question

J'ai beaucoup joué avec nestjs en utilisant typeorm et maintenant j'apprends à utiliser golang et gorm. Je reconstruis un système dans nestjs pour Go et j'ai du mal à utiliser une relation plusieurs-à-plusieurs. Étant donné que je travaille avec une base de données déjà en production et remplie, je dois modéliser la structure de la même manière que les autres projets afin qu'il n'y ait pas de problèmes.

J'ai deux tables liées à bien des égards, ce sont playlists et genres, dans la base de données de production elles génèrent playlists_genres > table avec les champs suivants :

Notez que ces champs sont similaires à playlistsid et genresid

Dans le projet golang, les résultats m2m du tableau sont les suivants :

Veuillez noter que les champs générés sont différents de ce dont j'ai besoin, je dois générer des identifiants pour la base de données en production, qui sont playlistsid et genresid.

Mon code relationnel ressemble à ceci :

type playlist struct {
    id        int32     `json:"id" gorm:"primarykey;autoincrement:true"`
    status    bool      `json:"status" gorm:"not null;default:false"`
    createdat time.time `json:"createdat" gorm:"column:created_at;autocreatetime:milli;type:timestamp without time zone;default:now();not null"`
    updatedat time.time `json:"updatedat" gorm:"column:updated_at;autoupdatetime:milli;type:timestamp without time zone;default:now();not null"`

    genres        []genre             `json:"genres" gorm:"many2many:playlists_genres"`
}

et

type Genre struct {
    ID          int32     `json:"id" gorm:"primaryKey;autoIncrement:true"`
    Name        string    `json:"name" gorm:"not null;type:varchar(255)"`

    Playlists    []Playlist         `json:"playlists" gorm:"many2many:playlists_genres"`
}

J'ai beaucoup cherché et je n'ai pas trouvé de moyen de changer les noms de ces colonnes autre que de créer manuellement une table intermédiaire avec les colonnes avec les noms dont j'ai besoin et de les relier de une à plusieurs.

Pouvez-vous m'aider à résoudre ce problème ? Est-il possible de faire cela sans créer manuellement la table ? Merci!

Solution

Malheureusement, je pense que la seule façon d'atteindre votre objectif est de créer une structure appelée PlaylistGenre et de remplacer les noms de colonnes ici.
En utilisant la convention Gorm, vous ne pouvez opérer que sur les contraintes de clé étrangère créées dans la base de données. Il n'y a aucune chance d'écraser les noms de colonnes réels de la table de jointure créée automatiquement.
En gorm 注释中,您可以使用这些属性来处理外键:foreignKeyreferencesjoinForeignKeyjoinReferences.

Cependant, vous devez utiliser column, ce qui n'est pas possible ici.

Si vous avez besoin d'un exemple de cette approche, n'hésitez pas à me le faire savoir !

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