Sql GORM多个预加载错误
目前正在使用GORM连接到两个数据库:POSTGRES和sqlite(使用代码开关选择要使用的数据库)。我在模式中定义了两个数据库表,如下所示: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
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才是解决问题的方法。