Gorm 按关联计数排序

Go gorm order by association count

我有以下数据结构:

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

type CollectionItem struct {
    CollectionID uint
    ItemID     uint
    Item
}

我如何查询 collections table 按多个 collection_item 关联排序的结果,即包含最多项目的集合排在第一位。

谢谢。

没有像rails counter cache in the gorm, but gorm has callbacks 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
}