我想获取今天没有排除日期的所有RecurringEvents。
我有以下型号:
重复发生的事件
const RecurringEvent = sequelize.definge('recurringEvent,{
id: {type: Sequelize.INTEGER, primaryKey:true},
title: Sequelize.STRING
});
和带有外键recurringEventId的ExcludeDates
const ExcludeDate = sequelize.define('exclude_date',{
id: {type: Sequelize.INTEGER, primaryKey:true},
recurringEventId: Sequelize.INTEGER,
date: Sequelize.DATE
});
我定义的关系
RecurringEvent.hasMany(ExcludeDate, {foreignKey: 'recurringEventId'});
我可以获得所有的RecurringEvent,包括带有
的excludeDates
RecurringEvent.findAll({include:[{model:ExcludeDate}]});
这将给我类似以下的输出
[
{
"id": 1,
"title": "Event1",
"exclude_dates": [
{
"id": 1,
"date": "2019-02-13",
"recurringEventId": 1,
},
{
"id": 2,
"date": "2019-02-14",
"recurringEventId": 1,
}
]
现在,我希望获得“重复发生”事件,但前提是今天没有排除日期。
到目前为止,我已经尝试过
RecurringEvent.findAll({
include: [{
model: ExcludeDate,
where: {
date: {
[Op.ne]: moment().format('YYYY-MM-DD')
}
}
}]
})
但是,这样只会保留带有当前日期的ExcludeDate条目:
[
{
"id": 1,
"title": "Event1",
"exclude_dates": [
{
"id": 2,
"date": "2019-02-14",
"recurringEventId": 1,
}
]
如果今天为它设置了ExcludeDate,如何排除整个RecurringEvent?
修改:
我也阅读了文档
要将包含的模型中的where条件从ON条件移动到顶层WHERE,可以使用'$ nested.column $'
所以我已经尝试过了:
RecurringEvent.findAll({where:{
'$exclude_dates.date$':{
[Op.ne]: moment().format('YYYY-MM-DD')
}
},
include: [{model: ExcludeDate}]
})
但是没有运气,我仍然在RecuringEvents中,而在exclude_dates属性中没有一个排除日期
答案 0 :(得分:0)
尝试将required: true,
添加到您的包含模型中以进行内部联接,而不是左联接。例如
RecurringEvent.findAll({
include: [{
model: ExcludeDate,
required: true,
where: {
date: {
[Op.ne]: moment().format('YYYY-MM-DD')
}
}
}]
})