Sql GORM多个预加载错误

Sql GORM多个预加载错误,sql,sqlite,go,go-gorm,Sql,Sqlite,Go,Go Gorm,目前正在使用GORM连接到两个数据库:POSTGRES和sqlite(使用代码开关选择要使用的数据库)。我在模式中定义了两个数据库表,如下所示: type TableClient struct { Model Synchronised bool FacilityID string `gorm:"primary_key"` Age int ClientSexID int M

目前正在使用GORM连接到两个数据库:POSTGRES和sqlite(使用代码开关选择要使用的数据库)。我在模式中定义了两个数据库表,如下所示:

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
  }
以前,我会用如下代码预加载相关表:

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)
现在查找失败并出现语法错误,当我查看生成的SQL时,它显示生成了以下SQL:

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

将其粘贴到sqlite控制台也会失败,并出现相同的错误:(靠近“,”:语法错误)

问题的关键在于WHERE子句,您需要使用“OR”,而不是“,”


这可能是GORM的问题,您可以为此向他们提出GitHub问题。您可以使用GORM中的db.Raw()绕过这个问题。一般来说,我更喜欢避免使用ORMs。部分原因是,手工构建SQL查询通常比在ORM中找到奇怪的方式更容易(对于基本CRUD以外的内容)。

问题的关键在于WHERE子句,您需要使用“OR”,而不是“not”。”


这可能是GORM的问题,您可以为此向他们提出GitHub问题。您可以使用GORM中的db.Raw()绕过这个问题。一般来说,我更喜欢避免使用ORMs。部分原因是,手工构建SQL查询通常比在ORM中找到奇怪的方式更容易(对于基本CRUD之外的事情)。

我同意。我也记录了其中的一些错误。但我同意,纯SQL是一种方式。我也记录了其中的一些错误。但纯SQL才是解决问题的方法。