无法根据连接的表字段对sequlize结果进行排序

时间:2018-04-06 13:37:38

标签: javascript mysql node.js sequelize.js

我正在使用3个续集模型,如下所述:

tags:
id
tag_name

product_tags:
id
tag_id --> Foreign Key 'id' from tags
product_id --> Foreign Key 'id' from products
tag_score

products:
id
name

我想获取产品名称及其相关标签和标记分数,并按分数对其进行排序,如下面的SQL查询中所述。

select t.tag_name, p.name, pt.tag_score from tags t inner join product_tags pt on t.id = pt.tag_id inner join products p on pt.product_id = p.id order by pt.tag_score desc;

根据续集文档,这可以通过如下命令子句来实现:

order: [this.db.ProductTag, 'tag_score', 'DESC']

但是,我收到错误消息:无法找到模型的有效关联,'ProductTag'

有人可以指出我在这里缺少什么吗?

编辑: Sequelize查询如下:

return this.db.Product.findAll({
  attributes: ['name'],
  include: [
    {
      model: this.db.Tag,
      as: 'tags',
      through: this.db.ProductTag,
      foreignKey: 'tag_id',
      otherKey: 'product_id',
      where: {
        tag_name: {
          $regexp: regexString
        }
      },
      required: true,
      include: [
        {
          model: this.db.ProductTag,
          as: 'product_tags',
          attributes: ['tag_score']
        }
      ]
    }
  ],
  order: [this.db.ProductTag, 'tag_score', 'DESC']
});

1 个答案:

答案 0 :(得分:0)

我想sequelize会创建子查询,因此如果您需要更改订单以获取false

if (
          subQuery
          && Array.isArray(order)
          && order[0]
          && !(order[0] instanceof Association)
          && !(typeof order[0] === 'function' && order[0].prototype instanceof Model)
          && !(typeof order[0].model === 'function' && order[0].model.prototype instanceof Model)
          && !(typeof order[0] === 'string' && model && model.associations !== undefined && model.associations[order[0]])
        ) {
          subQueryOrder.push(this.quote(order, model, '->'));
        }
        mainQueryOrder.push(this.quote(order, model, '->'));

或者您可以尝试使用sequelize.literal()。喜欢: order: [[sequelize.literal('tag_score DESC')]]