gpt4 book ai didi

sequelize.js - 在 Sequelize ORM 框架中加入没有关联的查询

转载 作者:行者123 更新时间:2023-12-04 08:54:28 24 4
gpt4 key购买 nike

我可以在没有在 Seuqelize 中定义关联的情况下进行连接查询吗?

我尝试通过 Sequelize 进行如下 sql 查询

SELECT * FROM MessageRecipient INNER JOIN MESSAGE ON MessageRecipient.messageIdno = MESSAGE.Idno 

我确实通过在使用 findAll 时使用添加的“include”来实现的,如下所示,我必须在使用 include 之前定义关联

消息.js
var Message = sequelize.define('Message', {
idno: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
subject: DataTypes.STRING,
messageBody: DataTypes.STRING,
creatorId: DataTypes.INTEGER,
parentMessageId: DataTypes.INTEGER,
expiryDate:DataTypes.DATE,
isActive:DataTypes.INTEGER}, {
classMethods: {
associate: function (models) {
Message.hasMany(models.MessageRecipient, { foreignKey: 'idno' });
}}});
return ChatMessage;
};

消息接收者.js
var MessageRecipient = sequelize.define('MessageRecipient', {
idno: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
recipientId: DataTypes.INTEGER,
recipientGroupId: DataTypes.INTEGER,
messageId: DataTypes.INTEGER,
isRead:DataTypes.INTEGER
}, {
classMethods: {
associate: function (models) {
MessageRecipient.belongsTo(models.Message, { foreignKey: 'messageId' });
}
}
}); return MessageRecipient;

findAll 包含
db.MessageRecipient
.findAll({
include: [{
model: db.Message,
required: true
}]
})
.then((MessageRecipients) => {
res.json(MessageRecipients);
})
.error((error) => {
res.sendStatus(500);
});

我会得到我想要的查询结果,如下所示
[
{
"idno": 1,
"recipientId": null,
"recipientGroupId": 1,
"messageId": 1,
"isRead": 0,
"createdAt": "2017-04-14T01:24:31.000Z",
"updatedAt": "2017-04-14T01:24:31.000Z",
"ChatMessage": {
"idno": 1,
"subject": "my message subject",
"messageBody": "my message content here",
"creatorId": 1,
"parentMessageId": 0,
"expiryDate": null,
"isActive": 1,
"createdAt": "2017-04-14T01:24:30.000Z",
"updatedAt": "2017-04-14T01:24:30.000Z"
}
}
]

如果我没有在 findAll 之前定义关联,我会得到错误
Unhandled rejection Error: ChatMessage is not associated to ChatMessageRecipient!

我怎样才能跳过 hasmany,belong 部分并仍然得到像上面一样的漂亮结果?
有没有解决方法可以做到这一点?

谢谢

最佳答案

我已经搜索过 the documentation并发现无法指定您加入的字段。据我所知,标准查询无法做到这一点。您要么必须进行单独(且效率低下)的查询,要么必须使用原始查询:

sequelize.query('SELECT * FROM MessageRecipient INNER JOIN MESSAGE ON MessageRecipient.messageIdno = MESSAGE.Idno').then(([results, metadata]) => {
// ...
})

这个例子来自 the documentation也。

关于sequelize.js - 在 Sequelize ORM 框架中加入没有关联的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43404371/

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