gpt4 book ai didi

mysql - Sequelize : get MIN/MAX Dates from association

转载 作者:行者123 更新时间:2023-12-03 22:43:08 25 4
gpt4 key购买 nike

我必须表格 - 一个用于事件,另一个用于日期(开始 - 结束),该事件是“事件的”。

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 }]
});

返回包含所有事件日期的嵌套事件列表 - 很棒。
[
{
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',
},
],
}
]

最佳答案

通过 group by 获得结果非常棘手并且有很多关联,但最后我找到了方法,这里是:

Event.findAll({
raw : true,
attributes : [ 'Event.*' , 'EventDates.eventId' , [sequelize.fn('max', sequelize.col('EventDates.end')),'end']],
include : {
model : EventDates ,
attributes :[]
},
group : ['Event.id','EventDates.eventId']
})

我认为你可以通过这个实现你的最后一个结果,我还没有尝试过,但这是你可以继续的方式
Event.findAll({
raw : true,
attributes : [ 'Event.*' , 'dates.*' , 'EventDates.eventId' , [sequelize.fn('max', sequelize.col('EventDates.end')),'end']],
include : [
{
model : EventDates ,
attributes :[]
},
{
model : EventDates ,
as : 'dates',
required : false,
separate : true
}
]
group : ['Event.id','EventDates.eventId']
})

关于mysql - Sequelize : get MIN/MAX Dates from association,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48502789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com