2017-02-27 166 views
0

我期待從數據庫中返回與一個或多個關鍵字相關的所有文章,但我不確定是否有正確的方法去解決這個問題?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

嗨,你可以嘗試通過

require:true 

在包括塊內部連接,並檢查

編號:https://stackoverflow.com/a/31680398/4583460

+0

這是行不通的。相同的行爲 –

+0

嗯。你可以粘貼實際的SQL查詢和你想要的查詢, –