Heim  >  Artikel  >  Backend-Entwicklung  >  Doppelte Klammern für die Where-Klausel mit „IN“ bei gorm

Doppelte Klammern für die Where-Klausel mit „IN“ bei gorm

WBOY
WBOYnach vorne
2024-02-10 08:12:08876Durchsuche

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

Der PHP-Editor Xinyi bringt Ihnen ein wichtiges Merkmal von gorm – die doppelten Klammern der where-Klausel von „IN“ in gorm. Mit dieser Funktion können wir bequemer abfragen, ob sich in einem bestimmten Feld mehrere Werte befinden, das Schreiben von Abfrageanweisungen vereinfachen und die Lesbarkeit und Wartbarkeit des Codes verbessern. Durch die Verwendung doppelter Klammern können wir in der Where-Klausel ein Slice übergeben, das den abzufragenden Wert enthält, und Gorm konvertiert ihn automatisch in eine „IN“-Klausel, um den Abfragevorgang auszuführen. Diese Funktion ist in der tatsächlichen Entwicklung sehr praktisch und hilft uns, komplexe Datenabfrageanforderungen effizienter zu bewältigen.

Frageninhalt

Ich verwende die Where-Klausel, um den Wert in der Datenbank über gorm zu aktualisieren

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

IDs sind Teil von IDs und der Benutzer ist die Struktur

Das Problem ist, dass ich diesen Fehler erhalte

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

Die von gorm generierte SQL ist diese. Es sieht so aus, als würde eine doppelte Klammer erstellt, die diesen Fehler verursacht. Aber ich weiß nicht, wie ich dieses Problem lösen kann

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

Bearbeiten 1

Ich habe () aus (?) entfernt und es hatte den gleichen Effekt

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列

Workaround

Ich habe die Antwort hier gefunden https://github.com/go-gorm/gorm/issues/5014 und https://gorm.io/docs/sql_builder. html#clause

Mit dieser Klausel kann ich so etwas tun

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

Das obige ist der detaillierte Inhalt vonDoppelte Klammern für die Where-Klausel mit „IN“ bei gorm. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen