プログラミング バックエンド

【Sequelize】where句でOR(Op.or)を使うと、全件取得されてしまうことがあるのでご注意を

スポンサーリンク

こんにちは!

今回は「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);
    });
  });
};

このように注意が必要です。

以上、お疲れさまでした〜🍵

スポンサーリンク

-プログラミング, バックエンド
-

© 2022 エンジニア×ライフハック Powered by AFFINGER5