【sequelize】findAllで複数条件で複数検索したいとき

sequelize

※プロモーションページが含まれる場合があります

こういうテーブルのデータがあるとする。

例:

id: 1, user_id: 1, card_name: "ブルーアイズ", deck_id: 1, cleanliness: "キレイ"
id: 2, user_id: 1, card_name: "エルフの剣士", deck_id: 1, cleanliness: "汚い"
id: 3, user_id: 3, card_name: "ブルーアイズ", deck_id: 1, cleanliness: "少し傷"  
id: 4, user_id: 2, card_name: "レッドアイズ", deck_id: 1, cleanliness: "キレイ"
id: 5, user_id: 1, card_name: "ブラックマジシャン", deck_id: 1, cleanliness: "切れてる"
id: 6, user_id: 3, card_name: "デーモンの召喚", deck_id: 1, cleanliness: "キレイ"  
id: 7, user_id: 1, card_name: "ブルーアイズ", deck_id: 1, cleanliness: "キレイ"
id: 8, user_id: 4, card_name: "ブラックマジシャン", deck_id: 1, cleanliness: "汚い"
id: 9, user_id: 4, card_name: "ブルーアイズ", deck_id: 1, cleanliness: "キレイ"  
id: 10, user_id: 2, card_name: "エクゾディアの足", deck_id: 1, cleanliness: "少し傷"
id: 11, user_id: 1, card_name: "ブラックマジシャンガール", deck_id: 1, cleanliness: "キレイ"
id: 12, user_id: 3, card_name: "エクゾディアの右手", deck_id: 1, cleanliness: "キレイ"  

いろんな条件を複数セットで一気に習得したい

取得したいセット

  • user_idが1でなおかつcard_nameがブルーアイズのモノ
  • user_idが2でなおかつcard_nameがレッドアイズのモノ
  • user_idが3でなおかつcard_nameがエクゾディアの足のモノ
  • user_idが4でなおかつcard_nameがデーモンの召喚のモノ

こういう時にfindAllで一気に習得する方法がどこにもなかったので共有します

結論これで行けました。

yugiouCard.findAll( where: { [ Sequelize.Op.or]: 
                           { [ Sequelize.Op.and]: [{ user_id: 1}, { card_name: "ブルーアイズ"} ]},
                           { [ Sequelize.Op.and]: [{ user_id: 2}, { card_name: "レッドアイズ"} ]}
                           { [ Sequelize.Op.and]: [{ user_id: 3}, { card_name: "エクゾディアの足"} ]},
                           { [ Sequelize.Op.and]: [{ user_id: 4}, { card_name: "デーモンの召喚"} ]},
} )

※↑のsequelizeの呼び出し方はそれぞれの環境によって変わると思いますのでご注意ください

最終的には配列で返ってきます。ヒットしなかったものは情報がないだけで特にエラーになることもなくでした。

ポイントは Sequelize.Op.orとSequelize.Op.andの併用ですね!

自身の備忘録として。

コメント

タイトルとURLをコピーしました