猿问

如何将 m:n 关系映射到切片字段?

我有一个结构Person:


type Person struct {

    Id     int64

    Name   string

    Colors []string

}

它应该从person表中获取其数据:


id | name

---------

1  | Joe

2  | Moe

和一张person_color桌子:


person_id | color

-----------------

1         | black

1         | blue

2         | green

通过SELECT p.id, p.name, pc.color FROM person AS p INNER JOIN person_color AS pc ON pc.person_id = p.id我将两个表合并到:


id | name | color

-----------------

1  | Joe  | black

1  | Joe  | blue

2  | Moe  | green

目前我唯一能想到的就是在迭代时手动映射颜色rows.Next()(注意:只是虚拟代码):


ps := make([]People, 0)


rows, err := db.Query("SELECT ...")


for rows.Next() {

    var p Person


    err := rows.Scan(&p.Id, &p.Name, &p.Color[0])


    exists := false


    for _, ps := range ps {

        if ps.Id == p {

            exists = true


            ps.Color = append(ps.Color, p.Color)

        }

    }


    if !exists {

        ps = append(ps, p)

    }

}

尽管这可行,但这很烦人,因为映射到切片字段是一种常见操作。


有什么方法可以使用sql或sqlx在所有切片字段上使上述通用?


守着一只汪
浏览 181回答 2
2回答
随时随地看视频慕课网APP

相关分类

Go
我要回答