Tôi có một mô hình Chuỗi Article
trong đó các bài viết liên quan đến nhau. Một số bài báo được dịch các bản sao của các bài viết khác. Mối quan hệ được thiết lập như sau:Phân tích lại vị trí mà không có
var Article = sequelize.define('Article', {
type : DataTypes.ENUM('source', 'translated'),
sourceArticleId : DataTypes.INTEGER
});
db.Article.hasMany(db.Article, {
foreignKey: 'sourceArticleId',
as : 'TranslatedArticles'
});
Vì vậy, một bài viết với type = 'source'
có thể có nhiều translatedArticles
nơi type = 'translated'
.
Bây giờ, tôi muốn truy vấn tất cả source
các bài viết không có bản dịch.
Dựa trên an issue at the Sequelize project github, điều này sẽ được thực hiện như sau:
Article.findOne({
where: Sequelize.literal('translatedArticles.sourceArticleId IS NULL'),
include: [
{
model: Article,
as : 'TranslatedArticles'
}
]
});
Tuy nhiên, khi tôi chạy này, tôi nhận được:
SequelizeDatabaseError: ER_BAD_FIELD_ERROR: Unknown column 'translatedArticles.sourceArticleId' in 'where clause'
Tôi cũng đã cố gắng thay đổi trong cách đặt tên, trong đó có TranslatedArticles.sourceArticleId
, articles.sourceArticleId
và Articles.sourceArticleId
.
Tôi có thiếu gì đó không?
Lưu ý rằng tôi tạm thời làm việc xung quanh vấn đề này bằng cách sử dụng một chữ NOT EXISTS truy vấn, như vậy:
Article.findOne({
where: Sequelize.literal('NOT EXISTS (SELECT id FROM Articles WHERE Article.id = Articles.sourceArticleId LIMIT 1)')
});
Bạn sử dụng phiên bản nào? – yanana
@yanana phiên bản 3.3.1 – Tom
Bạn có thể bật nhật ký SQL và xem những gì mà trình tạo truy vấn tiếp theo đang cố truy vấn không? –