BunDB 读取嵌套关系行

问题描述 投票:0回答:1

我想阅读按作者研究生院名称过滤的书籍,并获取这些书籍的所有详细信息。 我的结构为

Book
Author
Publisher
School
。相同的关系在结构本身中定义

type Book struct {
    bun.BaseModel `bun:"table:book"`

    AuthorID        uint32    `bun:"author_id"`
    PublisherID     uint32    `bun:"publisher_id"`
    
    Author    *Author              `bun:"rel:belongs-to,join:author_id=id"`
    Publisher *Publisher           `bun:"rel:belongs-to,join:publisher_id=id"`
}

type Author struct {
    bun.BaseModel `bun:"table:author"`

    ID uint32 `bun:"id,pk"`
    Name      string    `bun:"name"`

    HighSchoolID uint32    `bun:"grad_school_id"`
    HighSchoo   *School `bun:"rel:belongs-to,join:grad_school_id=id"`

    GradSchoolID uint32    `bun:"grad_school_id"`
    GradSchool   *School `bun:"rel:belongs-to,join:grad_school_id=id"`
}

type Publisher struct {
    bun.BaseModel `bun:"table:publisher"`

    ID        uint32    `bun:"id,pk"`
    Name      string    `bun:"name"`
}

type School struct {
    bun.BaseModel `bun:"table:school"`

    ID        uint32    `bun:"id,pk"`
    Name      string    `bun:"name"`
}

我尝试过以下查询,但这在嵌套 where 子句上失败

repo.db.
Reader().
NewSelect().
Model(&Book{}).
Relation("Author").
Relation("Publisher").
Relation("Author.HighSchool").
Relation("Author.GradSchool").
Where("grad_school.name = ?", "grad_school_name").
Scan(ctx)
sql go
1个回答
0
投票

您应该启用 debug 模式,将 Bun 查询打印到标准输出,并查看为嵌套关系分配了哪些别名。 我认为面包在关系之间添加了双下划线,所以在你的情况下它可能是:

Relation("Author.GradSchool"). // this becomes author__grad_school in sql
Where("author__grad_school.name = ?", "grad_school_name").

但是查询调试会显示正确的名称。

© www.soinside.com 2019 - 2024. All rights reserved.