Unable to order by associations conditionally
See original GitHub issueI have a model, say Base which has one Details1 model or has one Details2 model depending on the value of a field “type” (which says either details1 or details2).
Both Details1 and Details2 have a field “orderField”.
I need a way to order rows of the Base model by either Details1.orderField or Details2.orderField depending on whether Base.type = details1 or details2
I have tried looking up the sequelize docs relating to ordering: http://docs.sequelizejs.com/manual/querying.html#ordering
Approach 1:
{
include: [
{ model: Details1 },
{ model: Details2 }
],
order: [
[
{ model: Details1, as: 'Details1' }, 'orderField', 'DESC'
],[
{ model: Details2, as: 'Details2' }, 'orderField', 'DESC'
]
]
});
The above code however orders rows of Base models by Details1.orderField separately and by Details2.orderField separately.
For instance, if I had the following data:
{type: details1, Details1: {orderField: 2}}
{type: details2, Details2: {orderField: 1}}
{type: details2, Details2: {orderField: 5}}
{type: details1, Details1: {orderField: 4}}
{type: details2, Details2: {orderField: 3}}
Then the expected order is:
{type: details2, Details2: {orderField: 5}}
{type: details1, Details1: {orderField: 4}}
{type: details2, Details2: {orderField: 3}}
{type: details1, Details1: {orderField: 2}}
{type: details2, Details2: {orderField: 1}}
However, I am getting the output as:
{type: details1, Details1: {orderField: 4}}
{type: details1, Details1: {orderField: 2}}
{type: details2, Details2: {orderField: 5}}
{type: details2, Details2: {orderField: 3}}
{type: details2, Details2: {orderField: 1}}
Approach 2:
{
include: [
{ model: Details1, as: 'Details1' },
{ model: Details2, as: 'Details2' }
],
order: [
[
sequelize.literal('case when "Base".type = \'details1\' then "Details1".orderField else "Details2".orderField end'
)
]
]
};
However, this fails with an error: missing FROM-clause entry for table “Details1”
Environment
Dialect:
- mysql
- postgres
- sqlite
- mssql
- any Dialect library version: XXX Database version: XXX Sequelize version: 3.30.4 Node Version: 6.13.0 OS: XXX If TypeScript related: TypeScript version: XXX Tested with latest release:
- No
- Yes, specify that version:
Issue Analytics
- State:
- Created 4 years ago
- Comments:6 (4 by maintainers)
@papb Thank you for the prompt response.
This issue has been automatically marked as stale because it has been open for 14 days without activity. It will be closed if no further activity occurs within the next 14 days. If this is still an issue, just leave a comment or remove the “stale” label. 🙂