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言語にあまり詳しくないのでもっといい方法があるかもしれない。
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) }
このようなコードにすることで目的は達成できた。
一応これを使った僕のリポジトリはこちら↓