日頃の行い

個人的な日頃の行いをつらつら書いてます\\\\ ٩( 'ω' )و ////

Golangのsqlxでテーブルをjoinした結果をstructにbindする

ちょい前に簡単なSQLをstructにbindしたり、
IN句を使ったりしたやつは書いたんですが、
joinした時とか、structがstructを持ってる場合、
dbタグをどうやってbindするんだろうと思ったら、
友人が記事見つけてくれたので試してみました。

arata.hatenadiary.com

arata.hatenadiary.com

最終的にはSQLエイリアス (AS …) のほうで . でつなげれば良いみたいでした。
SQLをこんな感じにhoge.fooエイリアスとして利用して、

SELECT h.id AS "hoge.id", h.foo AS "hoge.foo", f.id AS id, f.bar AS bar 
FROM fuga AS f 
JOIN hoge AS h ON f.hoge_id = h.id

Fuga structにbindしようとすると Fuga.Hoge.Foo にその値がbindされるようでした。

type Hoge struct {
    ID  int    `db:"id"`
    Foo string `db:"foo"`
}

type Fuga struct {
    ID   int    `db:"id"`
    Hoge Hoge   `db:"hoge"`
    Bar  string `db:"bar"`
}

検証に使ったコードはこんな感じでした。

gist.github.com

join周りもいい感じにbindしてくれて便利。

参考