【发布时间】:2015-10-02 12:54:50
【问题描述】:
我有一个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没有翻译的文章。
基于an issue at the Sequelize project 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)')
});
【问题讨论】:
-
你用的是哪个版本的?
-
@yanana 版本 3.3.1
-
你能打开 SQL 日志看看 sequelize 查询生成器试图查询什么吗?
-
@StevenLu 日志是gist.github.com/tommedema/5f5ad310a3f31b1dccaa
标签: node.js sequelize.js