質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

1329閲覧

Sequelize(Node.js)とVue3で複数の条件を指定できる検索機能を実装したい。

kon2300

総合スコア17

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/10/25 13:19

編集2021/10/26 12:44

前提 ・ 実現したいこと

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"

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

渡ってきたパラメーターに 対して条件分岐することで意図した挙動となりました。

node

1searchArticles: async (req, res) => { 2 try { 3 if (req.age) { // 追記 (条件分岐したい項目を設定) 4 const result = await Article.findAll({ 5 where: { 6 age: req.body.age 7 } 8 }) 9 res.json(result) 10 } 11 } catch (error) { 12 res.json(error) 13 } 14}

投稿2021/11/13 01:05

kon2300

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問