我有一个 Sequelize 模型,名为 Article
,其中文章相互关联。有些文章是其他文章的翻译副本。关系设置如下:
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.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)')
});