Open1
【GORM】Or()関数を使わず、Where()関数のみでOR条件のクエリを生成する
一般的なOR条件の記述
GormにおいてOR条件を実行する際、
db.Where("role = ?", "admin").Or("role = ?", "super_admin").Find(&users)
// SELECT * FROM users WHERE role = 'admin' OR role = 'super_admin';
と、Or()関数をチェーンさせて、関数の引数にクエリを指定するが、チェーンが多くなることにより可読性を損なう場合がある。
Where()関数のみでOr条件を記述する
Where()関数の中に、明示的にORを記述することで、チェーンを浅くすることができる。
以下は、nameフィールドをlike指定、roleフィールドをsuper_admin
でOR検索する場合。
db.Where("name LIKE ? OR role = ?", "taro", "super_admin").Find(&users)
// SELECT * FROM users WHERE name LIKE '%taro%' OR role = 'super_admin';
OR()関数を使わず、OR条件を指定したクエリを記述することができる