代码之家  ›  专栏  ›  技术社区  ›  Fabio B.

在Gorm查询中为主表命名

  •  0
  • Fabio B.  · 技术社区  · 4 年前

    我的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 这是第一位的。

    据我所知,文档中没有包括如何指定表别名。

    有什么方法可以避免在查询中使用全名吗?

    0 回复  |  直到 4 年前
        1
  •  1
  •   Anni    4 年前

    尝试使用db。表(“?AS t”,model.BlogTag{}.TableName())在我的项目中运行良好。