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

WBOY
Freigeben: 2024-02-10 08:12:08
nach vorne
886 Leute haben es durchsucht

在 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'))
Nach dem Login kopieren

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'))
Nach dem Login kopieren

错误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,
                    },
                },
            },
        )
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!