首页 > 解决方案 > 嵌套的一对多关系可以自动转换为嵌套结构吗

问题描述

问题

我整天都在想,我只是在任何论坛上都找不到解决这个问题的优雅方法。我有两个模型,它们之间存在一对多的关系。我可以使用sqlx包将 sql 行映射到主结构和嵌套结构吗?

假设我们有以下不起作用的示例:

type Author struct {
    Id   int
    Name string
    Books []Book
}

type Book struct {
    Id   int
    Name string
    AuthorId int
}


func GetAuthorsWithBooks() []Author {
    var authors []Author
    query := `
        SELECT * FROM authors INNER JOIN books ON books.id = authors.id 
    `
    err := config.ApplicationConfig.DB.Select(&authors, query)
    return authors
}

如何在没有太多样板代码的情况下获得以下结果:

[
    {
        "id": 1,
        "name": "Lorem ipsum",
        "books": {
            "id": 1,
            "name": "Some book"
        }
    }
]

目前我的解决方案包括 2 个查询。一个用于书籍,一个用于作者,然后在 for 循环的帮助下将它们合并在一起。它可以工作,但由于性能原因(2 个查询而不是一个带有 JOIN 的查询),它很糟糕,而且容易出错。

我不想使用像 GORM 之类的 ORM,因为对于这样一个简单的应用程序来说,这将是矫枉过正。

标签: gosqlx

解决方案


推荐阅读