按两个嵌套关联顺序排序
Sequelize order by two nested associations
我尝试将 order
用于我的两个子查询。但是 sequelize 生成一个错误的查询并在主查询上使用这个 order by
。
这是我的查询:
Model.findAll({
order: sequelize.literal('("asset->forOrder"."value" - "asset.currenthours") desc),
offset: 0,
limit: 10,
include: [{
model: Asset,
as: 'asset',
include: [{
model: ThresholdService,
required: false,
as: 'thresholdservices'
}, {
model: ThresholdService,
where: {property: 'hours'},
required: false,
duplicating: false,
as: 'forOrder'
}],
}]
})
我希望得到这样的查询:
SELECT ..., "asset->forOrder"."asset_id", "asset->forOrder"."value"
FROM (
SELECT ...
FROM "machineidentity" AS "machineidentity"
LIMIT 10 OFFSET 0
) AS "machineidentity"
LEFT OUTER JOIN "asset" AS "asset" ON "machineidentity"."unique_id" = "asset"."machineIdentityId"
LEFT OUTER JOIN "thresholdservice" AS "asset->thresholdservices" ON "asset"."id" = "asset->thresholdservices"."asset_id"
LEFT OUTER JOIN "thresholdservice" AS "asset->forOrder" ON "asset"."id" = "asset->forOrder"."asset_id" AND "asset->forOrder"."property" = 'hours'
ORDER BY ("asset->forOrder"."value" - "asset"."currenthours") DESC;
但有:
SELECT ..., "asset->forOrder"."asset_id", "asset->forOrder"."value"
FROM (
SELECT ...
FROM "machineidentity" AS "machineidentity"
ORDER BY ("asset->forOrder"."value" - "asset"."currenthours") DESC
LIMIT 10 OFFSET 0
) AS "machineidentity"
LEFT OUTER JOIN "asset" AS "asset" ON "machineidentity"."unique_id" = "asset"."machineIdentityId"
LEFT OUTER JOIN "thresholdservice" AS "asset->thresholdservices" ON "asset"."id" = "asset->thresholdservices"."asset_id"
LEFT OUTER JOIN "thresholdservice" AS "asset->forOrder" ON "asset"."id" = "asset->forOrder"."asset_id" AND "asset->forOrder"."property" = 'hours'
ORDER BY ("asset->forOrder"."value" - "asset"."currenthours") DESC;
ORDER BY
出现在 machineidentity
查询中。
我在sequelize
中找到了这样的代码:
if (
subQuery
&& Array.isArray(order)
&& order[0]
&& !(order[0] instanceof Association)
&& !(typeof order[0] === 'function' && order[0].prototype instanceof Model)
&& !(typeof order[0].model === 'function' && order[0].model.prototype instanceof Model)
&& !(typeof order[0] === 'string' && model && model.associations !== undefined && model.associations[order[0]])
) {
subQueryOrder.push(this.quote(order, model, '->'));
}
mainQueryOrder.push(this.quote(order, model, '->'));
我刚刚创建了 order
,不满足这个 if
。
所以,现在我的 order
,看起来像:
[['asset.forOrder', 'value', sequelize.literal('-(machine.asset.currentkilometers - machine.asset.initialvalueinkm)')]]
我尝试将 order
用于我的两个子查询。但是 sequelize 生成一个错误的查询并在主查询上使用这个 order by
。
这是我的查询:
Model.findAll({
order: sequelize.literal('("asset->forOrder"."value" - "asset.currenthours") desc),
offset: 0,
limit: 10,
include: [{
model: Asset,
as: 'asset',
include: [{
model: ThresholdService,
required: false,
as: 'thresholdservices'
}, {
model: ThresholdService,
where: {property: 'hours'},
required: false,
duplicating: false,
as: 'forOrder'
}],
}]
})
我希望得到这样的查询:
SELECT ..., "asset->forOrder"."asset_id", "asset->forOrder"."value"
FROM (
SELECT ...
FROM "machineidentity" AS "machineidentity"
LIMIT 10 OFFSET 0
) AS "machineidentity"
LEFT OUTER JOIN "asset" AS "asset" ON "machineidentity"."unique_id" = "asset"."machineIdentityId"
LEFT OUTER JOIN "thresholdservice" AS "asset->thresholdservices" ON "asset"."id" = "asset->thresholdservices"."asset_id"
LEFT OUTER JOIN "thresholdservice" AS "asset->forOrder" ON "asset"."id" = "asset->forOrder"."asset_id" AND "asset->forOrder"."property" = 'hours'
ORDER BY ("asset->forOrder"."value" - "asset"."currenthours") DESC;
但有:
SELECT ..., "asset->forOrder"."asset_id", "asset->forOrder"."value"
FROM (
SELECT ...
FROM "machineidentity" AS "machineidentity"
ORDER BY ("asset->forOrder"."value" - "asset"."currenthours") DESC
LIMIT 10 OFFSET 0
) AS "machineidentity"
LEFT OUTER JOIN "asset" AS "asset" ON "machineidentity"."unique_id" = "asset"."machineIdentityId"
LEFT OUTER JOIN "thresholdservice" AS "asset->thresholdservices" ON "asset"."id" = "asset->thresholdservices"."asset_id"
LEFT OUTER JOIN "thresholdservice" AS "asset->forOrder" ON "asset"."id" = "asset->forOrder"."asset_id" AND "asset->forOrder"."property" = 'hours'
ORDER BY ("asset->forOrder"."value" - "asset"."currenthours") DESC;
ORDER BY
出现在 machineidentity
查询中。
我在sequelize
中找到了这样的代码:
if (
subQuery
&& Array.isArray(order)
&& order[0]
&& !(order[0] instanceof Association)
&& !(typeof order[0] === 'function' && order[0].prototype instanceof Model)
&& !(typeof order[0].model === 'function' && order[0].model.prototype instanceof Model)
&& !(typeof order[0] === 'string' && model && model.associations !== undefined && model.associations[order[0]])
) {
subQueryOrder.push(this.quote(order, model, '->'));
}
mainQueryOrder.push(this.quote(order, model, '->'));
我刚刚创建了 order
,不满足这个 if
。
所以,现在我的 order
,看起来像:
[['asset.forOrder', 'value', sequelize.literal('-(machine.asset.currentkilometers - machine.asset.initialvalueinkm)')]]