【发布时间】:2021-11-24 07:13:17
【问题描述】:
我有一个类似于以下的 Gorm 查询:
db.
Table(fmt.Sprintf("%s t", model.BlogTag{}.TableName())).
Select(`
t.id,
t.path,
t.title,
t.hits,
COUNT(DISTINCT b.id) AS used_times
`).
Joins("LEFT JOIN contentitem_tag_map bt ON bt.tag_id = t.id").
Joins("LEFT JOIN content b ON b.id = bt.content_item_id AND b.state = 1").
Where("t.published = 1").
Group("t.id").
Order("used_times DESC").
Find(&tags).Error
生成的查询如下所示:
SELECT t.id, t.path, t.title, t.hits, COUNT(DISTINCT b.id) AS used_times
FROM `myschema`.`vk9wz_tags`
LEFT JOIN myschema.vk9wz_contentitem_tag_map bt ON bt.tag_id = t.id
LEFT JOIN myschema.vk9wz_content b ON b.id = bt.content_item_id AND b.state = 1
WHERE t.published = 1
GROUP BY `t`.`id`
ORDER BY used_times DESC
我试图指定的别名t 没有被Gorm 拾取!因此 MySQL 不明白 t 首先是什么。
据我所知,文档不包括如何指定表别名。
有什么方法可以避免在查询中使用全名?
【问题讨论】:
-
gorm.io/docs/gorm_config.html#NamingStrategy 可能需要为
JoinTableName指定自定义返回值