2017-02-05 2 views
1

Zurzeit verwenden Sie GORM, um eine Verbindung zu zwei Datenbanken herzustellen: POSTGRES AND sqlite (mit einem Code-Schalter, um den zu verwendenden zu wählen). Ich habe eine 2-Datenbanktabellen in meinem Schema definiert, die wie folgt aussehen:GORM many2many Preload-Fehler

type TableClient struct { 
    Model 
    Synchronised bool 
    FacilityID string `gorm:"primary_key"` 
    Age      int 
    ClientSexID    int 
    MaritalStatusID   int 
    SpecificNeeds    []TableOptionList`gorm:"many2many:options_specific_needs"` 
} 

type TableOptionList struct { 
    ID  int `gorm:"primary_key"` 
    Name string 
    Value string 
    Text string 
    SortKey int 
    } 

Früher hätte ich im Zusammenhang Tabelle vorzuladen mit Code wie folgt:

var dbClient TableClient 
Db.Where("facility_id = ? AND client_id = ? AND id = ?;", URLFacilityID, URLClientID, URLIncidentID). 
    Preload("ClientSex"). 
    Preload("MaritalStatus"). 
    Preload("CareTakerRelationShip"). 
    Preload("HighestLevelOfEducation"). 
    Preload("Occupation"). 
    Preload("SpecificNeeds"). 
    First(&dbClient) 

Nun, da Nachschlag schlägt mit einem Syntaxfehler und wenn ich in der SQL erzeugt aussehen, zeigt die folgende SQL generiert wird:

SELECT * FROM "table_option_lists" INNER JOIN "options_specific_needs" ON  "options_specific_needs"."table_option_list_id" = "table_option_lists"."id" WHERE (("options_specific_needs"."table_client_id","options_specific_needs"."table_client_facility_id") IN (('one','LS034'))) 

einfügen, die in die sQLite-Konsole auch mit dem gleichen Fehler fehlschlägt: (in der Nähe „“: Syntaxfehler)

Antwort

0

Der Kern Ihres Problems ist in Ihrer WHERE-Klausel, Sie müssen "ODER" verwenden, nicht ",".

Dies ist wahrscheinlich ein Problem mit GORM und Sie könnten ein GitHub-Problem damit für sie öffnen. Sie können das Problem umgehen, indem Sie db.Raw() von GORM verwenden. Im Allgemeinen bevorzuge ich ORMs zu vermeiden. Ein Teil des Grundes ist, dass es oft einfacher ist, einfach eine SQL-Abfrage von Hand zu erstellen, als zu versuchen, die seltsame Art und Weise herauszufinden, dies im ORM zu tun (für Dinge, die über CRUD hinausgehen).

+0

Ich stimme zu. Ich dokumentiere auch einige Bugs darin. Aber reines SQL ist der Weg. –

Verwandte Themen