使用条件查询多对多

Querying Many to Many with Conditions

我有一个像这样的 gorm many2many 模型:

type User struct {
    gorm.Model
    Username    string  
    LikedBooks []Books `gorm:"many2many:user_liked_books;"`
}

type Book struct {
    gorm.Model
    Name        string 
    Likes       []User `gorm:"many2many:user_liked_books;"`
}

一个 User 可以喜欢很多 Book,而一个 Book 可以有很多 User 喜欢它。 我现在想查询被点赞的图书,return 前50个被点赞的图书。 我怎样才能使用 gorm 实现它?我不明白如何查询 book.liked = true 的条件,按喜欢的计数排序,限制为 50.
我无法在文档或 Whosebug 上找到这样的示例。

这可以通过为您描述的请求构建 SQL 查询的相同方式来完成,只需使用 gorm 函数即可。它可能看起来像这样:

var books []Book
tx := db.Table("books").
      Joins("INNER JOIN user_liked_books ulb ON ulb.book_id = books.id").
      Select("books.id, books.name, count(ulb.user_id) as likes_count").
      Group("books.id, books.name").
      Order("likes_count desc").
      Limit(50).
      Find(&books)

如果您还想加载 Likes 字段,请尝试将 .Preload("Likes") 添加到上面的构造中。