Sequelize哪里没有

Tom*_*Tom 28 node.js sequelize.js

我有一个ArticleSequelize模型,其中的文章彼此相关.有些文章是其他文章的翻译副本.关系设置如下:

var Article = sequelize.define('Article', {
    type                : DataTypes.ENUM('source', 'translated'),
    sourceArticleId     : DataTypes.INTEGER
});

db.Article.hasMany(db.Article, {
    foreignKey: 'sourceArticleId',
    as        : 'TranslatedArticles'
});
Run Code Online (Sandbox Code Playgroud)

所以,一篇文章type = 'source'可以有很多translatedArticles地方type = 'translated'.

现在,我想查询所有source没有翻译的文章.

基于Sequelize项目github上的一个问题,这将完成如下:

Article.findOne({
    where: Sequelize.literal('translatedArticles.sourceArticleId IS NULL'),
    include: [
        {
            model: Article,
            as   : 'TranslatedArticles'
        }
    ]
});
Run Code Online (Sandbox Code Playgroud)

然而,当我运行这个时,我得到:

SequelizeDatabaseError: ER_BAD_FIELD_ERROR: Unknown column 'translatedArticles.sourceArticleId' in 'where clause'

我也试过变化的命名,其中包括TranslatedArticles.sourceArticleId,articles.sourceArticleId,和Articles.sourceArticleId.

我错过了什么吗?

请注意,我通过使用文字NOT EXISTS查询暂时解决此问题,如下所示:

Article.findOne({
    where: Sequelize.literal('NOT EXISTS (SELECT id FROM Articles WHERE Article.id = Articles.sourceArticleId LIMIT 1)')
});
Run Code Online (Sandbox Code Playgroud)

swi*_*fty 0

我在这里胡思乱想,但我认为这就是实现的方式:

Article.findOne({
    include: [
        {
            model: Article,
            as   : 'TranslatedArticles',
            attributes: [[models.sequelize.fn('COUNT', 'sourceArticleId'), 'translationCount']]
            having: {
                translationCount: 0
            },
        }
    ]
});
Run Code Online (Sandbox Code Playgroud)