こんにちは!
今回は「Sequelizeでwhere句のOR(Op.or)における注意点」についてお伝えしたいと思います。
Sequelize
を使っている方で、where
句にOR
を指定したいときに、Op.or
を使うかと思います。
今回、僕が実装する中で、Op.or
に空を配列を設定すると、全件取得されてしまう問題がありました。
この経験から注意喚起という意味を目的に記事にしました。
※Op.in
については同じ事象は確認されてないので、大丈夫です。
Op.or に空を配列が設定されると、全件取得されてしまう
Op.or
には配列を渡すことで、WHERE user_id = 1 OR user_id = 2
のように複数条件を指定することができますが、空の配列を渡すと、全件取得されてしまいます。
以下は具体例です。
// 例:ユーザー一覧を取得
const {Op} = db.Sequelize;
exports.getUserList = (userIdArr) => {
const sequelize = require('../utils/getDatabase')(db);
const db = sequelize.models;
return new Promise((resolve, reject) => {
db.user.findAll({
attributes: ['email', 'name'],
where: {
id: {[Op.or]: userIdArr}, // ユーザーIDの配列が空の場合、全件取得してしまう
},
raw: true,
}).then((data) => {
resolve(data);
}).catch((err) => {
reject(err);
});
});
};
このように注意が必要です。
以上、お疲れさまでした〜🍵