У меня есть модель 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.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)')
});