目前使用GORM连接到两个数据库:POSTGRES和sqlite(使用代码开关选择使用哪个)。我的架构中定义了2个数据库表,如下所示:
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控制台也失败并出现相同的错误:(接近",":语法错误)
答案 0 :(得分:0)
问题的关键在于你的WHERE子句,你需要使用" OR",而不是","。
这可能是GORM的一个问题,你可以为此打开一个GitHub问题。您可以使用GORM中的db.Raw()解决问题。一般来说,我更愿意避免使用ORM。部分原因是手工构建SQL查询通常比尝试找出在ORM中执行它的奇怪方法(对于基本CRUD之外的事情)更容易。