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

Comment gérer les erreurs de suppression GORM lorsque l'enregistrement n'existe pas ?

DDD
Libérer: 2024-11-01 04:18:27
original
420 Les gens l'ont consulté

How to Handle GORM Delete Errors When the Record Doesn't Exist?

Gestion des erreurs de suppression GORM

Dans Go, l'utilisation de la bibliothèque GORM pour effectuer des opérations de base de données est une pratique courante. Une fonctionnalité de GORM est la possibilité de supprimer des enregistrements d'une base de données. Cependant, rencontrer des erreurs lors de la suppression est possible, et les gérer de manière appropriée est essentiel.

Considérez la fonction suivante pour supprimer une catégorie d'une base de données à l'aide de GORM :

<code class="go">func DeleteCategory(id uint) error {
    var category Category
    category.ID = id
    result := db.Delete(&category)
    fmt.Println("result.Error: ", result.Error)
    return result.Error
}</code>
Copier après la connexion

Cette fonction tente de supprimer une ligne dans la base de données avec l'identifiant spécifié. Lorsqu'une ligne est supprimée avec succès, GORM renvoie nil dans result.Error. Cependant, si une erreur se produit, GORM renvoie également nil dans result.Error.

Un scénario particulier dans lequel ce manque d'informations sur l'erreur peut être problématique est celui de la tentative de suppression d'une ligne qui n'existe pas. Puisque GORM considère qu'il s'agit d'une opération réussie (car aucune ligne n'a été affectée), il renvoie nil dans result.Error. Dans de tels cas, il peut être plus approprié de renvoyer une erreur pour indiquer que la tentative de suppression a échoué en raison de l'absence de l'enregistrement.

Pour résoudre ce problème, vous pouvez vérifier le champ RowsAffected du résultat GORM pour déterminer si toutes les lignes ont été supprimées. Si aucune ligne n'est affectée, cela signifie que l'enregistrement avec l'identifiant spécifié n'existe pas dans la base de données et vous pouvez renvoyer un message d'erreur approprié. Voici une version mise à jour de la fonction DeleteCategory :

<code class="go">func DeleteCategory(id uint) error {
    c := Category{ID: id}

    db := db.Delete(&c)
    if db.Error != nil {
        return db.Error
    } else if db.RowsAffected < 1 {
        return fmt.Errorf("row with id=%d cannot be deleted because it doesn't exist", id)
    }

    return nil
}</code>
Copier après la connexion

Avec cette modification, la fonction gérera désormais correctement le cas où l'enregistrement spécifié n'existe pas et retournera une erreur avec un message clair.

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!

source:php.cn
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!