gpt4 book ai didi

sql - GORM many2many 预加载错误

转载 作者:IT王子 更新时间:2023-10-29 02:22:22 66 4
gpt4 key购买 nike

目前使用 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 控制台中也失败并出现相同的错误:(靠近“,”:语法错误)

最佳答案

问题的症结在于你的WHERE子句,你需要使用“OR”,而不是“,”。

这可能是 GORM 的问题,您可以为此向他们提出 GitHub 问题。您可以使用 GORM 中的 db.Raw() 来解决这个问题。一般来说,我更愿意避免使用 ORM。部分原因是,与尝试在 ORM 中找出奇怪的方法(对于基本 CRUD 之外的事情)相比,手动构建 SQL 查询通常更容易。

关于sql - GORM many2many 预加载错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42049175/

66 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com