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

Doubles crochets pour la clause Where utilisant 'IN' chez gorm

WBOY
Libérer: 2024-02-10 08:12:08
avant
888 Les gens l'ont consulté

在 gorm 处使用“IN”的 where 子句的双括号

L'éditeur PHP Xinyi vous apporte une fonctionnalité importante de gorm - les doubles crochets de la clause Where utilisant "IN" dans gorm. Cette fonctionnalité nous permet de demander plus facilement si plusieurs valeurs se trouvent dans un certain champ, simplifie l'écriture des instructions de requête et améliore la lisibilité et la maintenabilité du code. En utilisant des doubles crochets, nous pouvons passer une tranche dans la clause Where, qui contient la valeur à interroger, et gorm la convertira automatiquement en clause "IN" pour effectuer l'opération de requête. Cette fonctionnalité est très pratique dans le développement réel et nous aide à gérer plus efficacement les exigences complexes en matière de requêtes de données.

Contenu de la question

J'utilise la clause Where pour mettre à jour les valeurs dans la base de données via gorm

db.Session(&gorm.Session{FullSaveAssociations: true}).Where("id IN (?)", ids).Updates(users)

les identifiants font partie des identifiants et l'utilisateur est la structure

Le problème est que j'obtiens cette erreur

错误1241(21000):操作数应包含1列

Le SQL généré par gorm est le suivant. Il semble que cela crée une double parenthèse, provoquant cette erreur. Mais je ne sais pas comment résoudre ce problème

UPDATE `users` SET `status`='CANCELED',`updated_at`='2023-12-12 20:39:40.904' WHERE id IN (('066a75df-ba11-49c8-9b39-b1cce029760e','5f95f93e-94a5-46d1-86eb-dde83437ea26'))
Copier après la connexion

Modifier 1

J'ai supprimé () de (?) et cela a eu le même effet

db.Session(&gorm.Session{FullSaveAssociations: true}).Where("id IN ?", ids).Updates(users)

UPDATE `users` SET `status`='CANCELED',`updated_at`='2023-12-12 21:18:46.537' WHERE id IN (('066a75df-ba11-49c8-9b39-b1cce029760e','5f95f93e-94a5-46d1-86eb-dde83437ea26'))
Copier après la connexion

错误1241(21000):操作数应包含1列

Solution de contournement

J'ai trouvé la réponse ici https://github.com/go-gorm/gorm/issues/5014 et https://gorm.io/docs/sql_builder. html#clause

En utilisant cette clause, je peux faire quelque chose comme ça

query.Clauses(
            clause.Where{
                Exprs: []clause.Expression{
                    clause.Expr{
                        SQL:                "id IN ?",
                        Vars:               []interface{}{ids},
                        WithoutParentheses: true,
                    },
                },
            },
        )
Copier après la connexion

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: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
À 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!