Mam Article
Sequelize model, gdzie artykuły odnoszą się do siebie. Niektóre artykuły są przetłumaczonymi kopiami innych artykułów. Relacja jest ustawiony tak:Sequelize gdzie NIE
var Article = sequelize.define('Article', {
type : DataTypes.ENUM('source', 'translated'),
sourceArticleId : DataTypes.INTEGER
});
db.Article.hasMany(db.Article, {
foreignKey: 'sourceArticleId',
as : 'TranslatedArticles'
});
Tak, artykuł z type = 'source'
może mieć wiele translatedArticles
gdzie type = 'translated'
.
Teraz chcę zapytać wszystkie artykuły source
, które nie mają tłumaczenia.
podstawie an issue at the Sequelize project github, to będzie realizowane tak:
Article.findOne({
where: Sequelize.literal('translatedArticles.sourceArticleId IS NULL'),
include: [
{
model: Article,
as : 'TranslatedArticles'
}
]
});
Jednak gdy uruchamiam to uzyskać:
SequelizeDatabaseError: ER_BAD_FIELD_ERROR: Unknown column 'translatedArticles.sourceArticleId' in 'where clause'
Próbowałem również różnice w nazewnictwa, w tym TranslatedArticles.sourceArticleId
, articles.sourceArticleId
i Articles.sourceArticleId
.
Czy brakuje mi czegoś?
pamiętać, że tymczasowo obejść ten problem za pomocą dosłownym NIE ISTNIEJE zapytanie, tak jak poniżej:
Article.findOne({
where: Sequelize.literal('NOT EXISTS (SELECT id FROM Articles WHERE Article.id = Articles.sourceArticleId LIMIT 1)')
});
Którą wersję używasz? – yanana
@yanana wersja 3.3.1 – Tom
Czy można włączyć dziennik SQL i zobaczyć, co kwerenda wyszukiwania sequelize próbuje zapytanie? –