【问题标题】:Go gorm order by association count按关联计数排序
【发布时间】:2019-01-12 09:25:15
【问题描述】:

我有以下数据结构:

type Collection struct {
    gorm.Model
    Name            string
    CollectionItems []CollectionItem
}

type CollectionItem struct {
    CollectionID uint
    ItemID     uint
    Item
}

如何通过多个collection_item 关联查询collections 表排序结果,即具有大多数项目的集合排在第一位。

谢谢。

【问题讨论】:

  • 你试过了吗?
  • @Зелёный 对于初学者来说很好 我已经尝试多次阅读文档,但它没有关于如何实现这一点的提示。我可以创建一个计数器字段并将其用于排序,但我不想手动维护它。拥有类似 rails 的 counter_cache 之类的东西真的很好,但是唉。
  • 这真的和GORM无关。这只是形成正确的 SQL 查询的问题。你试过什么?

标签: go go-gorm


【解决方案1】:

gorm中没有rails counter cache这样的功能,但是gorm有回调before* & after*所以很容易实现按集合计数排序功能。

例如:

// Updating data in same transaction
func (c *Collection) AfterUpdate(tx *gorm.DB) (err error) {
  tx.Model(&Collection{}).Where("id = ?", c.ID).Update("items_count", gorm.Expr("items_count + ?", 1))
  return
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    相关资源
    最近更新 更多