我必须使用表 - 一个用于事件,另一个用于日期(开始 - 结束)此事件是“活动的”。
id name
-- ----
1 event 1
2 event 2
然后是EventDates
eventId start end
------- ----- ---
1 2018-01-14 2018-01-15
1 2018-01-17 2018-01-18
2 2018-02-14 2018-02-18
使用hasMany()
Event.DATES = Event.hasMany(models.EventDates, {
as: 'dates',
foreignKey: 'eventId',
});
查询包括EventDates在内的所有事件:
await Event.findAll({
include: [{ association: Event.DATES }]
});
返回包含所有EventDates的嵌套事件列表 - 很棒。
[
{
id: 1,
name: 'event 1',
dates: [
{
start: '2018-01-14',
end: '2018-01-15',
},
{
start: '2018-01-17',
end: '2018-01-18',
},
],
},
{
id: 2,
name: 'event 2',
dates: [
{
start: '2018-02-14',
end: '2018-02-18',
},
],
}
]
但是现在我想在事件中添加一个maxEndDate,这样我就可以检查它是否仍处于活动状态,或者是否所有的EventDates都在过去。我可以手动添加另一个LEFT JOIN
,如下所示:
# ...
LEFT OUTER JOIN (SELECT eventId, MAX(end)
FROM `EventDates`
GROUP BY eventId) dates
ON `Event`.`id` = `dates`.`eventId`
# ...
但是我怎么能用Sequelize达到同样的目的呢?
[
{
id: 1,
name: 'event 1',
maxEndDate: ??,
dates: [
{
start: '2018-01-14',
end: '2018-01-15',
},
{
start: '2018-01-17',
end: '2018-01-18',
},
],
},
{
id: 2,
name: 'event 2',
maxEndDate: ??,
dates: [
{
start: '2018-02-14',
end: '2018-02-18',
},
],
}
]
答案 0 :(得分:0)
通过分组获得结果并且有很多关联非常棘手,但最后我找到了方法并且在这里:
iFrame
我认为你可以实现你的最后一次出局,由此,我没有尝试过,但这是你可以继续前进的方式
iFrame