You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sequelize按关联模型TrLine的存在性排序问题

解决方案

要实现优先展示存在对应TrLine记录的TrProduct,你需要在排序规则中先按TrLine记录的存在性排序,再按原有的TrLine id排序。具体修改如下:

首先确保已引入Sequelize(未引入则添加const { Sequelize } = require('sequelize');),然后调整order配置:

const products = await TrProduct.findAll({
  where: {
    userId: userId,
  },
  offset: (page - 1) * 20,
  limit: 20,
  attributes: ['id'],
  include: {
    model: TrLine,
    limit: 1,
    required: false
  },
  order: [
    // 优先排序:存在TrLine的记录在前
    [Sequelize.literal('"TrLine"."id" IS NOT NULL'), 'DESC'],
    // 再按TrLine的id升序,空值后置
    [TrLine, 'id', 'ASC', 'NULLS LAST']
  ]
});

关键说明

  • Sequelize.literal('"TrLine"."id" IS NOT NULL') 会生成SQL判断:若TrLine的id不为空(即存在关联记录),返回true(对应数值1),否则返回false(对应数值0)。用DESC排序时,1会排在0前面,实现有TrLine的记录优先展示。
  • 保留原有[TrLine, 'id', 'ASC', 'NULLS LAST'],用于在存在TrLine的记录内部按id升序排列,同时确保无TrLine的记录排在最后且内部顺序不影响。

如果你的表名或字段名在SQL中是小写格式(比如trline而非TrLine),需要调整literal里的引号部分,匹配实际生成的SQL表名。

内容的提问来源于stack exchange,提问作者Hasan Toker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 03:54:54