2015-06-13 42 views
3

我觉得自己好像碰到了砖墙,同时将旧的PHP应用程序功能转换为Node和Sequelize。也许我正在接近ORM能做的限制,但只是在我放弃之前想问一下。让我们想象三个表格:Video,Task,PublishDate如何通过聚合函数在次序中排序

该应用要求Video可能有多个PublishDate和多个Task s。 Task s的截止日期将通过查看Video的最小值PublishDate s来计算。

因此,如果Video2015-12-012015-08-15 2分PublishDate的,我们会把使用2015-08-15和执行额外的计算上获得Task到期日。

当我试图获得按其计算到期日期排列的Task列表时,会出现此问题。

我试过很多不同的方法。这一最新尝试尝试使用sequelize.fn功能

models.Task.findAll({ 
    where: {isActive: false, isCompleted: false}, 
    include: [ 
     { 
     model: models.Video, 
     attributes: [[sequelize.fn('min', 'video.publishDates.date'), 'dueDate']], 
     include: [models.PublishDate] 
     } 
    ], 
    order: [['video', 'dueDate', 'ASC']], 
    limit: 50 
}) 

我不鼓励,我在正确的方向我当家,因为即使没有订单条款,这一尝试只返回一个记录。尽管如此,这感觉就像我一整天都离我最近的一样,而且我错过了一些信息或语法,这将使这成为可能。

这是我第一次进入ORM世界,所以我很抱歉,如果有一些简单的东西我错过了。我尽最大努力研究Google上的文档和其他问题,但迄今为止还没有运气。

回答

1

您需要使用该功能进行订购。 您应该尝试:

order : [['video','ASC'],[sequelize.fn('min', 'video.publishDates.date'), 'ASC]]