node.js - 使用 ANY 运算符将 SQL 查询转换为 Sequelize findAll 函数时出现问题
问题描述
我有三个表格:
1.post(postId(PK), postTitle, postDescription) 2.campaignId
(PK), platformId(FK), EffectiveFrom, EffectiveThrough, postArray: postId[])
// 这里 postArray 包含 postIds整数类型
3. 平台(platformId(PK), platformName)
我在 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 中定义关系,所以不可能。
推荐阅读
- php - 使用 Symfony 框架在 Easyadmin 中索引和 CRUD 页面的布局是从右到左而不是从左到右
- angular - MatPaginator 角度材料:我怎么知道我是否在表格的最后一页?
- hive - 启用 Hive 缓存并面临错误
- c# - IsWithinDistance 无法翻译
- c - 在共享库上实现缺失符号
- javascript - 客户端 JavaScript 如何将用户 ID/密码发送到 Apache 服务器,以便解锁受 .htpasswd 保护的文件夹?
- java - Java JSoup 从网站抓取 img src 返回一个奇怪的 url
- html - 从 Web 应用程序打印 ZPL 命令文件
- swift - 即使数据已更新,tableviewdeleterows 也会导致应用程序崩溃
- sql - 触发器仅允许类大小/最大值为 2。处理某些值,但不处理其他值