2017-04-14 67 views
4

我可以在沒有在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並仍然得到像上面那樣的漂亮結果? 有沒有解決辦法可以做到這一點?

感謝

回答

0

雖然你問真正不應該做,但如果仍然存在,你可以嘗試raw queries

+0

感謝您的回覆。我想知道爲什麼ORM框架強制 開發人員定義表之間的關聯,但真正的SQL服務器可以在沒有任何關聯的情況下連接查詢?有什麼協會的必要性? – JasonHsieh

+1

爲什麼不可能在顯式定義的表格列上定義關係? – Charlie