我目前正在尝试在两个表之间进行内部联接: 第一个是在名为SmartMonument的数据库中,而第二个是在名为SmartMonumentCB的数据库中。
以下是这些表的init的代码:
在'database.js'中(指SmartMonument):
const CompaniesForClient=sequelize.define('cfc', {
scrapperName: {type: Sequelize.STRING, allowNull: false},
clientID : {type: Sequelize.INTEGER(10), allowNull: false}
});
CompaniesForClient.sync();
module.exports={sequelize, CompaniesForClient};
第二个表是:
const Companies = sequelize.define('companies', {
scrapperName: {type: Sequelize.STRING, allowNull: false},
scrapperAddress: {type: Sequelize.STRING(500)}
});
Companies.sync();
module.exports = {sequelize, Companies};
这两个表都创建得很好,然后我尝试添加一些东西,这样这两个表都与scrapperName字段相关。
我尝试这样做:
CompaniesForClient.hasOne(CompaniesDB.Companies, {foreignKey: 'scrapperName'});
我的目标是最终能够在一个请求中阅读所有公司领域的所有CompaniesForClient字段,如下所示:
CompaniesForClient.findAll({where:{clientID: param}, include: [{model: Companies}];
现在我收到以下错误:
未处理拒绝SequelizeDatabaseError:无法添加外键约束 在Query.formatError(/home/ubuntu/backendDev/node_modules/sequelize/lib/dialects/mysql/query.js:222:16) 在Query.connection.query [as onResult](/home/ubuntu/backendDev/node_modules/sequelize/lib/dialects/mysql/query.js:55:23) 在Query.Command.execute(/home/ubuntu/backendDev/node_modules/mysql2/lib/commands/command.js:30:12) 在Connection.handlePacket(/home/ubuntu/backendDev/node_modules/mysql2/lib/connection.js:515:28) 在PacketParser.onPacket(/home/ubuntu/backendDev/node_modules/mysql2/lib/connection.js:94:16) 在PacketParser.executeStart(/home/ubuntu/backendDev/node_modules/mysql2/lib/packet_parser.js:77:14) 在Socket。 (/home/ubuntu/backendDev/node_modules/mysql2/lib/connection.js:102:29) 在emitOne(events.js:115:13) 在Socket.emit(events.js:210:7) 在addChunk(_stream_readable.js:266:12) 在readableAddChunk(_stream_readable.js:253:11) 在Socket.Readable.push(_stream_readable.js:211:10) 在TCP.onread(net.js:585:20)
答案 0 :(得分:1)
确保您的外键(如果不是主键)是唯一的,并检查数据库中的数据是否与您要与之关联的表中的数据匹配(当然在外键列中)