2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GormのWhere句で条件分岐付きで検索をかけたい

Last updated at Posted at 2021-05-19

投稿した背景

バックエンドの言語は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使い方によっては色々なことができそうですね。

参考にしたサイト

- https://gorm.io/ja_JP/docs/method_chaining.html - https://stackoverflow.com/questions/36188706/separate-where-in-query
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?