前提 ・ 実現したいこと
Vue3
Vite
Express(node)
Docker
の環境で開発しています。
Sequelize(Mysql)を使用し、条件検索をしたいと思っています。
発生している問題
フロント側から postData として検索条件をバックエンド側に投げているのですが、うまく条件分岐できません。
postData の内容として
"age", "annual_income", "family_members"
となっております。
__どれか一つの条件、または2項目でも検索できるようにしたい__のですが、3項目すべてが完全一致したもののみの検索となってしまいます。
該当のソースコード
vue
1postData(age, annual_income, family_members) 2//条件を指定しない場合の変数の値は "" となります。
node
1const { Article } = require('../models') 2 3searchArticles: async (req, res) => { 4 try { 5 const result = await Article.findAll({ 6 where: { 7 age: req.body.age, 8 annual_income: req.body.annual_income, 9 family_members: req.body.family_members 10 } 11 }) 12 res.json(result) 13 } catch (error) { 14 res.json({ searchArticlesError: error }) 15 } 16} 17
試したこと
node
1const { Op } = require('sequelize') //追記 2 3searchArticles: async (req, res) => { 4 try { 5 const result = await Article.findAll({ 6 where: { 7 [Op.or]: { //追記 8 age: req.body.age, 9 annual_income: req.body.annual_income, 10 family_members: req.body.family_members 11 } 12 } 13 }) 14 res.json(result) 15 } catch (error) { 16 res.json({ searchArticlesError: error }) 17 } 18}
上記コードも試してみましたが、当てはまるものすべてが抽出されてしまい意図した動きとなりませんでした。
下記のコードのように、age, family_members で条件指定した際に、"20代", "夫婦" の完全一致ではなく、"20代", "夫婦" を含む Articleが抽出されてしまいます。※例えば、"30代"でも "夫婦"であると抽出されてしまう。
vue
1<select name="age"> 2 <option value="20代"> </option> 3</select> 4 5<select name="annual_income"> 6 <option value=""> </option> 7</select> 8 9<select name="family_members"> 10 <option value="夫婦"> </option> 11</select>
よろしくおねがいします。
補足情報(FW/ツールのバージョンなど)
"express": "~4.16.1",
"sequelize": "^6.6.2"
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。