基于多个条件建立一对一的关系



我试图在GORM中实现一个关系,而不是简单地基于id外键。数据库结构的快速概述:

有一个order表,它包含一个tableNo列,通常是一个整数,但也可以是一个字符串(一些表说B2)。表号需要匹配到一个表(行)在table表(对不起混淆数据库表名称)。此关系通过venueIdtableNo实现。

如果我要在MySQL中写这个关系,我们可以使用以下方式连接表:

select o.tableNo, o.venueId, t.title, t.venueId from order o left join table t on t.venueId = o.venueId where replace(t.title, "Table #", '') = o.tableNo order by o.createdAt desc;

tableNo (order) venueId (order) title (table) venueId (table) tbody> <<tr> 7 2229 表# 7 2229
9 2462 表# 9 2462
15 2229 表# 15 2229

我已经想出了一个解决办法。

第一个主要问题是语法错误,它阻止了GORM给我任何查询日志。gorm:"references:Title,foreignKey:TableNo" json:"table"应该是gorm:"references:Title;foreignKey:TableNo" json:"table"

接下来,我将关系更改为venueId,因为回想一下SQL,这是连接操作正在进行的,所以我们有gorm:"foreignKey:VenueId;references:VenueId" json:"table"

最后,预加载必须包含一个与表编号值匹配的条件:

r.db.Preload("Table", "replace(`table`.title, 'Table #', '') = ?", &order.TableNo).First(&order, id)

现在的问题是如何不使用替换,并以一种除了'Table #'之外的字符串可以在tableNo前面的方式做到这一点。

希望有人发现这有用!

相关内容

  • 没有找到相关文章

最新更新