续集在哪里没有

我有一个Article Sequelize模型,其中的文章相互关联。 有些文章是其他文章的翻译副本。 关系是这样设置的:

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

所以, type = 'source'的文章可以有很多的translatedArticles ,其中type = 'translated'

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

基于Sequelize项目github上的一个问题,可以这样做:

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

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

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

我也尝试了命名的变体,包括TranslatedArticles.sourceArticleIdarticles.sourceArticleIdArticles.sourceArticleId

我错过了什么吗?

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

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

我不知道你在后端使用了什么数据库技术,但我猜测它是区分大小写的。 我相信这不是find领域,因为你需要在翻译的文章中大写。 这应该工作:

 Article.findOne({ where: Sequelize.literal('TranslatedArticles.sourceArticleId IS NULL'), include: [ { model: Article, as : 'TranslatedArticles' } ] }); 

我要在这里头顶,但是我认为这是如何实现的:

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