投稿した背景
バックエンドの言語はPHPでフレームワークはLaravelを使い続けていた筆者。 つい最近ひょんなことからGolangを使い始めたのである。 GolangのORMであるGormを使用した際にハマってしまったことを解決したので、新しい言語に挑戦するのと同時に Qiitaにも初投稿を試みるのであった。※つまりは本投稿は初投稿かつ基本的なことしか書いてないのでGormもう得意です。って人は読み飛ばして大丈夫かと思います。お手柔らかに。
GormのWhere句で条件分岐付きで検索をかけたい
GormのWhereを使ってmehod chainingする際によく使用されるのは以下の様なコード。
db.Where("name = ?", "jinzhu").Where("age = ?", 18).Find(&user)
このコードで実行される実際のSql文は以下のようになる。
SELECT * FROM `users` WHERE name = "jinzhu" AND age = 18;
しかし、例えばユーザー検索機能などでnameは入力されているがageは入力されていなかったりと、特定の値しかフォームでの入力で受け取らない場合がある
chain := db.Where("")
if name != "" { //nameの入力があった場合
chain.Where("id = ?", name)
}
if age != "" { //ageの入力があった場合
chain.Where("age = ?", age)
}
chain.Find(&user)
上記のコードにして実行するとif文の条件に引っかかた場合のみ、 where句に追加することができた。
ちなみにgorm.Open()してdb宣言してからのCRUDが実行される間でしたら、いくらでもメソッド(Where, Select, Omit, Joins, Scopes, Preload, Raw等)を追加できるようです。
Gorm使い方によっては色々なことができそうですね。