如何解决Sequelize嵌套嵌套功能无法使用限制/订单/属性?

时间:2019-01-28 16:47:55

标签: mysql node.js sequelize.js

我有一些相互关联的模型,我需要在某个请求中将它们全部获取。我基本上需要在所有部分上使用limitorderattributes,但是这导致嵌套的include变得异常,我不完全确定这是怎么回事

它并没有真正打印出任何错误或任何东西,或者只是不将模型包含在响应中(即它们为空。),或者包括了它们,但是诸如订单/限制之类的东西被忽略了。

我已经尝试使用subQueryseparate等...这些都不起作用。

相关查询;

const categories = await models.Category.findAll({
  attributes: ['id', 'title', 'description'],
  order: [['title', 'ASC']],
  include: [
    {
      model: models.Product,
      attributes: ['id', 'title'],
      through: { attributes: [] },
      include: [
        {
          model: models.Price,
          attributes: ['id', 'amount', 'createdAt'],
          order: [['createdAt', 'DESC']],
          limit: 1,
        },
      ],
    },
  ],
});

关联;

models.Category.belongsToMany(models.Product);
models.Product.belongsToMany(models.Category);

models.Product.hasMany(models.Price);
models.Price.belongsTo(models.Product);

理想情况下,我希望上面提供的查询返回;

  • Category,其升序基于title
  • Product位于Category内,具有属性idtitle
  • Price内部的
  • Product,具有属性idamountcreatedAt,基于createdAt的降序,以及限制为1。

1 个答案:

答案 0 :(得分:0)

为了使查询按Product.Price.createdAt进行排序,请将[models.Product, models.Price, 'createdAt', 'DESC']添加到order。就限制而言:为了限制包含的模型,您需要将其作为单独的查询运行,因此请将separate: true添加到包含中。

代码:

const categories = await models.Category.findAll({
  attributes: ['id', 'title', 'description'],
  order: [['title', 'ASC'], [models.Product, models.Price, 'createdAt', 'DESC']],
  include: [
    {
      model: models.Product,
      attributes: ['id', 'title'],
      through: { attributes: [] },
      include: [
        {
          model: models.Price,
          attributes: ['id', 'amount', 'createdAt'],
          separate: true,
          limit: 1,
        },
      ],
    },
  ],
});