我正在使用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']
});
答案 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')]]