Maison  >  Article  >  développement back-end  >  Doubles crochets pour la clause Where utilisant "IN" chez gorm

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

WBOY
WBOYavant
2024-02-10 08:12:08876parcourir

在 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'))

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'))

错误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,
                    },
                },
            },
        )

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