我已经阅读了Sequelize文档,但找不到任何有用的内容
我想要做的是在include
中添加原始查询或自定义模型,是否可能?
model.Post.findAll({
include: [{
model: model.User,
attributes: ['fullname', 'profilepic'],
},
{
model: model.PostComments,
},
{
model: "Raw Query"
}
]
}
我想要实现的目标是:
Select post_id, count(*) as total_likes from post_likes group by post_id
我无法通过简单地使用include
来实现这一点,所以我想要做的是从上面的查询中创建一个表/模型,然后在include中使用它。
如果我在使用include
时使用分组,则会从顶级提供分组,并且我只想将group
应用于post_like
表。
如果发现令人困惑或不清楚,请告诉我。
答案 0 :(得分:0)
您可以使用
Model.findAll({
attributes: [[models.sequelize.literal('CASE WHEN "field1" = true THEN 55
ELSE 23 END'), 'field3']]
}
或强>
Model.findAll({
attributes: { include: [[models.sequelize.literal('CASE WHEN "field1" = true THEN 55 ELSE 23 END'), 'field3']]}
}
答案 1 :(得分:0)
我一直想做同样的事情,使用在 include 内部动态形成的原始查询,但是没有这种方法就不可能使用 include 模型https://sequelize.org/master/class/lib/model.js~Model.html#static-method-findAll。
出于MySQL的目的,我将内部联接(包括)转换为所在位置。我正在进行内部联接,以避免出现This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery
异常。我收到此异常是因为我有一个应用了LIMIT的子查询。
如果它可以帮助任何人:
let rows = await j_model.findAll({
attributes: [...j_columns, `${association}.meta_key_id`],
include: [
{
model: um_model,
as: association,
attributes: ['um_id'],
on: {'j_id' : {$col: 'j.j_id'} }
],
where: {'j_id': {$in: sequelize.literal(`(SELECT * FROM (${massive_inner_raw_query}) as tmp)`)}},
logging: console.log
});
实际魔术在这一行:
where: {'j_id': {$in: sequelize.literal(`(SELECT * FROM (${massive_inner_raw_query}) as tmp)`)}}
SELECT * FROM 删除了该异常,让我可以在 where 中进行操作,而不是想要的 INNER JOIN 。也许您可以对您的问题进行类似的处理。