Javascript 续集限制包括关联
当限制结果并包括相关模型时,我对Sequelize有一个问题 以下内容将生成正确的结果,限制为10并正确排序Javascript 续集限制包括关联,javascript,mysql,sequelize.js,Javascript,Mysql,Sequelize.js,当限制结果并包括相关模型时,我对Sequelize有一个问题 以下内容将生成正确的结果,限制为10并正确排序 Visit.findAll({ limit: 10, order: 'updatedAt DESC', }).success(function(visits) { res.jsonp(visits); }).failure(function(err) { res.jsonp(err); }) SQL 然而,当我添加一个关联时,它会突然限制子查询,因此由于结果集有限,排序
Visit.findAll({
limit: 10,
order: 'updatedAt DESC',
}).success(function(visits) {
res.jsonp(visits);
}).failure(function(err) {
res.jsonp(err);
})
SQL
然而,当我添加一个关联时,它会突然限制子查询,因此由于结果集有限,排序永远不会发生
Visit.findAll({
limit: 10,
order: 'updatedAt DESC',
include: [
{ model: Account, required: true }
]
}).success(function(visits) {
res.jsonp(visits);
}).failure(function(err) {
res.jsonp(err);
})
SQL
我所期望的是对顶部查询进行限制,如下所示:
SELECT
...
FROM
(SELECT ...) AS `Visits`
ORDER BY `Visits`.updatedAt DESC LIMIT 10
LIMIT 10;
您不应该在订单的单个字符串中同时使用键和方向。从: “用户名描述”, //将返回用户名DESC-即不要这样做 正确的解决方案是:
order: ['updatedAt', 'DESC']
完整的工作示例:
"严格使用",;
var Sequelize=需要“Sequelize”;
var sequelize=新的sequelize
'测试',//数据库
'测试',//用户名
'测试',//密码
{
主机:“localhost”,
方言:“postgres”
}
;
var Customer=sequelize.定义“客户”{
名字:{type:Sequelize.STRING},
姓氏:{type:Sequelize.STRING}
};
变量顺序=续集。定义“顺序”{
金额:{type:Sequelize.FLOAT}
};
var第一客户;
Customer.hasManyOrder,{constraints:true};
Order.belongsToCustomer,{constraints:true};
sequelize.sync{force:true}
.Then函数{
返回客户。创建{firstName:'Test',lastName:'Testerson'};
}
.Then函数作者1{
firstCustomer=author1;
退货订单。创建{CustomerId:firstCustomer.id,金额:10};
}
.Then函数{
退货订单。创建{CustomerId:firstCustomer.id,金额:20}
}
.Then函数{
退货订单.findAll{
限额:10,
包括:[客户],
订单:[
['updatedAt','DESC']
]
};
}
.Then函数displayResultsresults{
结果.功能c{
console.dirc.toJSON;
};
}
.Then函数{
process.exit0;
};
产生:
选择Order.id、Order.amount、Order.createdAt、Order.updatedAt、Order.CustomerId、Customer.id作为Customer.id、Customer.firstName作为Customer.firstName、Customer.lastName作为Customer.lastName、Customer.createdAt作为Customer.createdAt,Customer.updatedAt AS Customer.updatedAt FROM Orders AS Order LEFT外部加入Customers AS Customer ON Order.CustomerId=Customer.id Order BY Order.updatedAt DESC LIMIT 10;
订单字段键型号订单:['FieldOrder','DESC']
例:
订单字段包括模型
订单:[模型包括,'FieldOrder','DESC']
例:
我有与上面相同的问题,如果我尝试上面的解决方案,它会在子查询中和子查询外部添加一个ORDERBY子句。子查询外部失败,错误为“未知列…”。。。虽然“顺序”确实存在问题,但不确定这是公认的答案。要避免子查询并在末尾保持限制,您需要调用findAll{subquery:false,…},或findAll{include:{replicing:false,…}。另请参见
SELECT
...
FROM
(SELECT ...) AS `Visits`
ORDER BY `Visits`.updatedAt DESC LIMIT 10
LIMIT 10;
order: ['updatedAt', 'DESC']
db.ModelA.findAll({
include: [{
model: db.ModelB
}],
order: ['CreatedDateModelA', 'DESC']
})
.then(function(response){
}, function(err){
})
db.ModelA.findAll({
include: [{
model: db.ModelB
}],
order: [db.ModelB,'CreatedDateModelA', 'DESC']
})
.then(function(response){
}, function(err){
})