gpt4 book ai didi

node.js - 将带有 ANY 运算符的 SQL 查询转换为 Sequelize findAll 函数的问题

转载 作者:行者123 更新时间:2023-12-03 22:37:49 24 4
gpt4 key购买 nike

我给出了三个表:
1. 帖子(postId(PK), postTitle, postDescription)
2.campaign(campaignId(PK), platformId(FK), EffectiveFrom, EffectiveThrough, postArray: postId[])
//这里 postArray 包含 Integer 类型的 postIds
3.平台(平台ID(PK),平台名称)

我在 PostgreSQL 客户端上运行的查询是:

select posts.*, platforms.*, campaigns.campaignId, campaigns.platformId, campaigns.postArray
from campaigns
INNER JOIN platforms
ON campaigns.platformId = platforms.platformId
INNER JOIN posts
ON posts.postId = ANY(campaigns.postArray);

它返回以下输出:
postid  posttitle   postdescription platformid  platformname    campaignid  platformid  postarray
1 Post1 This is Post1 1 Facebook 1 1 {1,2,3}
2 Post2 This is Post2 1 Facebook 1 1 {1,2,3}
3 Post3 This is Post3 1 Facebook 1 1 {1,2,3}
2 Post2 This is Post2 1 Facebook 2 1 {2,4,5}
4 Post4 This is Post4 1 Facebook 2 1 {2,4,5}
5 Post5 This is Post5 1 Facebook 2 1 {2,4,5}
2 Post2 This is Post2 3 LinkedIn 3 3 {2,3,4,5}
...

现在我想要 Sequelize 中的相同输出,但不确定如何在 findAll 函数中使用“Any”运算符。

这是我的 findAll 代码:
exports.findAll = (req, res, next) => {
Campaigns.findAll({
include: [
{
model: Platform,
required: true
},
{
model: Post,
required: true,
[Op.any]: ['"postArray"']
}
],
order:[
['"campaignId"', 'ASC']
]
})
.then(campaign=> {
res.status(200).json(campaign.sort(function(c1, c2){return c1.campaignId - c2.campaignId}));
})
.catch(err => {
console.log(err);
res.status(500).json({msg: "error", details: err});
});
};

&这些是关系:
  db.campaigns.hasMany(db.posts,{sourceKey: 'postId', foreignKey: 'postArray'});
db.campaigns.hasOne(db.platforms,{sourceKey: 'platformId', foreignKey: 'platformId'});

我知道我做错了,它不会运行。请建议我一个解决方案和更好的方法来解决我的问题。

最佳答案

Sequelize 不支持通过数组的关系。使用 include 创建 JOIN 仅支持在 sequelize 中定义的关系,并且由于无法在 sequelize 中定义关系,这是不可能的。

关于node.js - 将带有 ANY 运算符的 SQL 查询转换为 Sequelize findAll 函数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56127836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com