2017-02-27 7 views
0

1つ以上のキーワードに関連付けられたデータベースからすべての記事を返すことを検討していますが、これについて正しい方法があるとは思いませんか?Sequelize:関連キーワードに基づいて検索を実装する方法は?

私はSequelize 3.xとnode.js 3.7.0を使用しています。次ので

データモデルはなります。私が試した

const Article = sequelize.define('article', { 
        ... 
       } 

const Keyword = sequelize.define('keyword', { 
        name: Sequelize.STRING, 
        lang: Sequelize.STRING 
       } 

const ArticleKeyword = sequelize.define('article_keyword', { 
        articleId: Sequelize.INTEGER, 
        keywordId: Sequelize.INTEGER 
       } 

(Article).belongsToMany(
    Keyword, { through: ArticleKeyword, as: 'keyword' }); 

(Keyword).belongsToMany(
    Article { through: ArticleKeyword, as: 'article' }); 

次にクエリ:

var keywordFilter; 
if (req.body.keywords) { 
    var keywords = req.body.keywords); 
    if (typeof keywords === 'string') { 
     keywords = keywords.split(/ *, */); 
    }   
    keywordFilter = { name: { $in: keywords } }; 
} 

Article.findAll({ 
    where: { 
     deleted: false     
    }, 
    include: [{ 
     model: Keyword, 
     as: 'keywords', 
     where: keywordFilter, 
     attributes: ['name'], 
     through: { 
      attributes: [] 
     } 
    }] 
}).then(function(articles) { 
    ... 
}); 

私はここに見つける午前の問題は、それが返され、一致するキーワードを持つだけで記事を選択するのではなく、ありますすべての記事を検索し、その結果のクエリで指定されたキーワードを選択するだけです。

誰もがこれについて正しい方向を示唆することはできますか?

答えて

0

こんにちはあなたが参加し、

のRefチェックし、内側のインクルードブロックに

require:true 

を渡して試すことができます:https://stackoverflow.com/a/31680398/4583460

+0

動作しません。同じ振る舞い –

+0

うーん。実際のSQLクエリとクエリを貼り付けることができますか? –

関連する問題