Ho un modello Sequelize Article
in cui gli articoli si correlano tra loro. Alcuni articoli sono copie tradotte di altri articoli. La relazione è messa a punto in questo modo:Sequenza dove NON è stato impostato
var Article = sequelize.define('Article', {
type : DataTypes.ENUM('source', 'translated'),
sourceArticleId : DataTypes.INTEGER
});
db.Article.hasMany(db.Article, {
foreignKey: 'sourceArticleId',
as : 'TranslatedArticles'
});
Così, un articolo con type = 'source'
può avere molti translatedArticles
dove type = 'translated'
.
Ora, desidero interrogare tutti gli articoli source
che non hanno una traduzione.
Sulla base di an issue at the Sequelize project github, questa sarebbe stata compiuta in questo modo:
Article.findOne({
where: Sequelize.literal('translatedArticles.sourceArticleId IS NULL'),
include: [
{
model: Article,
as : 'TranslatedArticles'
}
]
});
Eppure, quando faccio funzionare questo ottengo:
SequelizeDatabaseError: ER_BAD_FIELD_ERROR: Unknown column 'translatedArticles.sourceArticleId' in 'where clause'
Ho anche provato le variazioni nella denominazione, tra cui TranslatedArticles.sourceArticleId
, articles.sourceArticleId
e Articles.sourceArticleId
.
Mi manca qualcosa?
Nota che temporaneamente aggirare il problema utilizzando un letterale NON ESISTE interrogazione, in questo modo:
Article.findOne({
where: Sequelize.literal('NOT EXISTS (SELECT id FROM Articles WHERE Article.id = Articles.sourceArticleId LIMIT 1)')
});
Quale versione usi? – yanana
@yanana versione 3.3.1 – Tom
È possibile attivare il registro SQL e vedere per che cosa il query del generatore di sequelize sta tentando di eseguire una query? –