子查询使用嵌套查询(包括)进行序列化

时间:2019-09-06 18:03:23

标签: node.js postgresql sequelize.js

我有这两个模型:

const Category = sequelize.define('Category', {
    name: {
      type: DataTypes.STRING,
      unique: true
    },
    description: {
      type: DataTypes.STRING,
    },
    status: {
      type: DataTypes.BOOLEAN,
      default: true
    },
    image: DataTypes.STRING,
  }, {});
  Category.associate = function (models) {
    Category.hasMany(models.Product)
    Category.hasMany(models.Category, { as: 'child', foreignKey: 'ParentId' });
    Category.belongsTo(models.Category, { as: 'parent', foreignKey: 'ParentId' });
  };
  return Category;

const Product = sequelize.define('Product', {
    name: { type: DataTypes.STRING, unique: true },
    description: { type: DataTypes.STRING },
    price: { type: DataTypes.INTEGER },
    status: {
      type: DataTypes.BOOLEAN,
      default: true
    },
    image: DataTypes.STRING,

  }, {});
  Product.associate = function (models) {
    Product.belongsTo(models.Category)
  };
  return Product;

这里没什么好想的。我的类别模型可以具有用于嵌套目的的CategoryId。所以我的问题是我可以在类别模型中使用子查询来选择具有相关类别ID的产品吗?

Category.findAll({
        limit: page_size,
        where: {
            ParentId: {
                [sequelize.Op.eq]: null
            }
        },
        include: [{

            model: Category,
            as: "child",
            attributes: [
                [sequelize.literal('(SELECT * FROM "Products" WHERE "CategoryId" = "child"."id")'),
                    'products'],
            ],
            group: ['products']
        }],
        offset: offset_value,
        order: [
            ['id', 'DESC'],
        ],
    })

我试图包含,在包含部分中,我需要查询将其分组为字段的产品。

  

p.s:如果类别实例没有CategoryId,则将其视为   父母。

我编写了此查询并测试了此错误:

  

子查询必须仅返回一列

0 个答案:

没有答案