Potewoのブログ

電子工作が好きな学生の書く技術系のブログです。

gormで他のテーブルの情報で条件を絞り込む方法

type Note struct {
    gorm.Model
    English     string
    Japanese    string
    Description string
    Tags        []Tag
}

type Tag struct {
    gorm.Model
    NoteID uint
    Name   string
}

こんな感じの構造体でモデルを作っていたときに、TagのNameでNoteを絞り込みたかった。やり方を調べて書いてあった通りにやってみたが、うまくいかず、最終的にはサブクエリを使うことでうまくいった。SQLとGo言語にあまり詳しくないのでもっといい方法があるかもしれない。

gorm.io

func Tags(tx *gorm.DB, tags []string) *gorm.DB {
    sub := d.db.Select("note_id").Where("name in ?", tags).Table("tags")
    return tx.Where("id in (?)", sub)
}

このようなコードにすることで目的は達成できた。

一応これを使った僕のリポジトリはこちら↓

github.com