Open1

【GORM】Or()関数を使わず、Where()関数のみでOR条件のクエリを生成する

TAROTARO

一般的な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条件を指定したクエリを記述することができる

参考:https://gorm.io/ja_JP/docs/query.html