【问题标题】:Sequelize - order by associations conditionallySequelize - 有条件地按关联排序
【发布时间】:2019-07-04 00:34:06
【问题描述】:

我有一个模型,比如 Base,它有一个 Details1 模型或一个 Details2 模型,具体取决于字段“type”(表示 details1 或 details2)的值。

Details1Details2 都有一个字段“orderField”。

有没有办法根据 Base.type = details1 或 details2 按 Details1.orderField 或 Details2.orderField 对 Base 模型的行进行排序?

我已尝试查找与订购有关的 sequelize 文档:http://docs.sequelizejs.com/manual/querying.html#ordering

我试过这个:

Base.findAll(
{
  include: [
     { model: Details1 },
     { model: Details2 }
  ],
  order: [
     [
       { model: Details1, as: 'Details1' }, 'orderField', 'DESC'
     ],[
       { model: Details2, as: 'Details2' }, 'orderField', 'DESC'
     ]
  ]
});

然而,上面的代码分别通过 Details1.orderField 和 Details2.orderField 对 Base 模型的行进行排序。

例如,如果我有以下数据:

{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}}

那么预期的顺序是:

{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}}

但是,我得到的输出是:

{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}}

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    您可以尝试一件事:使用 CASE 语句派生单个字段以进行排序。

       order: [
       [Sequelize.literal("case when details1.orderField not null then details1.orderField else details2.orderField end")]
       ]
    

    您可能不得不使用表别名来完成这项工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      相关资源
      最近更新 更多