我有一个 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:“where 子句”中的未知列“translatedArticles.sourceArticleId”
我也尝试过命名的变体,包括 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)')
});
最佳答案
我不知道您在后端使用的是什么数据库技术,但我猜它是区分大小写的。我相信它没有找到该字段,因为您需要将已翻译文章中的 t 大写。这应该有效:
Article.findOne({
where: Sequelize.literal('TranslatedArticles.sourceArticleId IS NULL'),
include: [
{
model: Article,
as : 'TranslatedArticles'
}
]
});
关于node.js - Sequelize where has NOT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31397271/