gpt4 book ai didi

node.js - Sequelize targetKey 不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 22:23:49 30 4
gpt4 key购买 nike

我正在尝试使用sequelize关联两个模型“Note”和“Resource”。但是,targetKey 没有按预期工作。

注释模式:

module.exports = function(sequelize, DataTypes) {
return sequelize.define('note', {
NoteID: {
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true,
autoIncrement: true
},
Title: {
type: DataTypes.STRING(50),
allowNull: true
},
Note: {
type: DataTypes.STRING(500),
allowNull: false
},
CreatedBy: {
type: DataTypes.INTEGER(11),
allowNull: false,
references: {
model: 'resource',
key: 'ResourceID'
}
},
UpdatedBy: {
type: DataTypes.INTEGER(11),
allowNull: true,
references: {
model: 'resource',
key: 'ResourceID'
}
}
}, {
tableName: 'note'
});
};

资源模式:

module.exports = function(sequelize, DataTypes) {
return sequelize.define('resource', {
ResourceID: {
type: DataTypes.INTEGER(11),
allowNull: false,
primaryKey: true,
autoIncrement: true
},
FirstName: {
type: DataTypes.STRING(250),
allowNull: false
},
LastName: {
type: DataTypes.STRING(250),
allowNull: false
}
}, {
tableName: 'resource'
});
};

协会:

Resource.belongsTo(Note,{
foreignKey: 'UpdatedBy',
as: 'Resource_Updated_Note'
});

Note.hasOne(Resource,{
foreignKey: 'ResourceID',
targetKey: 'UpdatedBy',
as: 'Note_Updated_By'
});

Resource.belongsTo(Note,{
foreignKey: 'CreatedBy',
as: 'Resource_Created_Note'
});

Note.hasOne(Resource,{
foreignKey: 'ResourceID',
targetKey: 'CreatedBy',
as: 'Note_Created_By'
});

虽然我在关联时提到了 targetKey,但它在连接表时采用的是 PrimaryKey。

执行

Note.findAll({
include: [{
model: Resource,
as: 'Note_Updated_By'
}],
where: {
Status: {
[SQLOP.or]: ['Active', 'ACTIVE']
}
}
}).then(function (response) {
callback(response);
});

根据执行,生成此选择查询。

SELECT * FROM `note` LEFT OUTER JOIN `resource` AS `Note_Updated_By` ON `note`.`NoteID` = `Note_Updated_By`.`ResourceID`;

不应是 note.NoteID,而应该是 note.UpdatedBy

最佳答案

从我使用的新版本开始"sequelize": "^5.8.12"对于 hasOnehasMany 关系,使用 sourceKey 而不是 targetKey 对我有用。

ModelName.hasOne(ModelName1, {
as: 'SomeAlias',
foreignKey: 'foreign_key',
onDelete: 'NO ACTION',
onUpdate: 'NO ACTION',
sourceKey: 'YOUR_CUSTOM_ASSOCIATION_KEY'
});

关于node.js - Sequelize targetKey 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49818406/

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