当我使用
await Session.create()
创建模型的新实例时,它返回默认文字,而不是生成的值。
我得到了
dataValues: {
id: Literal { val: '(UUID())' },
created_at: Literal { val: 'NOW()' },
updated_at: Literal { val: 'NOW()' }
}
sql 表插入了正确的值,而不是生成的 uuid 和当前日期时间,但在使用 create() 时无法获取它们。
续集连接:
const sequelize = new Sequelize(process.env.SQL_DB, process.env.SQL_USER, process.env.SQL_PASSWORD,
{
host: process.env.SQL_HOST,
dialect: 'mysql',
dialectOptions: {
multipleStatements: true
},
// logging: false,
}
);
型号:
export const Session = sequelize.define(
"session",
{
id: {
type: DataTypes.UUID,
defaultValue: sequelize.literal("(UUID())"),
primaryKey: true,
},
created_at: {
type: DataTypes.DATE,
defaultValue: sequelize.literal("NOW()"),
},
updated_at: {
type: DataTypes.DATE,
defaultValue: sequelize.literal("NOW()"),
},
},
{
timestamps: false,
underscored: true,
freezeTableName: true,
}
);
当您使用sequelize.literal定义默认值时,Sequelize将它们视为文字字符串,并且不会在JavaScript环境中执行UUID()或NOW()等函数。当插入记录时,这些函数的实际执行发生在数据库级别。
您应该使用 defaultValue 属性和函数来动态生成值。尝试这样的事情,
export const Session = sequelize.define(
"session",
{
id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true,
},
created_at: {
type: DataTypes.DATE,
defaultValue: DataTypes.NOW,
},
updated_at: {
type: DataTypes.DATE,
defaultValue: DataTypes.NOW,
},
},
{
timestamps: false,
underscored: true,
freezeTableName: true,
}
)