我可以更新除id(主键)之外的每个字段的值。这是一个网站。我希望能够通过网站更新ID。
module.exports = {
schema: function (sequelize, DataTypes) {
return sequelize.define(
'T_Event',
{
id: {
type: DataTypes.STRING,
primaryKey: true
},
user_id: {
type: DataTypes.STRING
},
name: {
type: DataTypes.STRING
},
created_at: {
type: DataTypes.DATE
},
description: {
type: DataTypes.STRING
},
image: {
type: DataTypes.STRING
},
closed_at: {
type: DataTypes.DATE
}
},
{
timestamps: true,
paranoid: true,
underscored: true,
freezeTableName: true
}
)
}
我正在将sequelize 3.33.0与node和MySQL数据库一起使用。 所有属性都具有选择,插入和更新权限。
答案 0 :(得分:0)
出于安全原因,Sequelize限制了这种操作。通常,通过运行时使用用户提供的信息更新主键是一个坏主意。这可能会导致各种问题,尤其是如果此时其他用户正在使用更改的对象。
我遵循经验法则:如果可以更改列值,则它不是主键的理想选择。如果所有列中都没有好的候选者,则仅出于此目的创建一个。
schema: function (sequelize, DataTypes) {
return sequelize.define(
'T_Event',
{
uid: {
type: DataTypes.BIGINT,
primaryKey: true,
autoIncrement: true
},
id: {
type: DataTypes.STRING,
unique: true
},
// ...
)
}
也就是说,在某些情况下这种解决方案是行不通的。在这种情况下,您可以使用一种解决方法,进行更新以更改ID:
T_Event.update(
{
id: new_value
}, {
where: {
uid: current_value
}
}
);