我可以在沒有在Seuqelize中定義的關聯的情況下進行連接查詢嗎?在Sequelize ORM框架中沒有關聯地連接查詢
我試着通過Sequelize
SELECT * FROM MessageRecipient INNER JOIN MESSAGE ON MessageRecipient.messageIdno = MESSAGE.Idno
使SQL查詢類似下面我也通過加入使其「包括」使用的findAll像下面的時候,我必須定義的關聯之前,我使用包括
Message.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;
};
messageRecipient.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,屬於part並仍然得到像上面那樣的漂亮結果? 有沒有解決辦法可以做到這一點?
感謝
感謝您的回覆。我想知道爲什麼ORM框架強制 開發人員定義表之間的關聯,但真正的SQL服務器可以在沒有任何關聯的情況下連接查詢?有什麼協會的必要性? – JasonHsieh
爲什麼不可能在顯式定義的表格列上定義關係? – Charlie