问题描述
我无法在Sequelize(v:6.9.0,PostGres方言)中执行任何类型的upsert或创建。
使用现成的id
作为PK,在name
字段上具有唯一约束。我已禁用时间戳记,因为我不需要它们,并且upsert
在抱怨它们。我尝试过手动定义PK ID,并允许Sequelize神奇地创建它。这是当前的定义:
const schema = {
name: {
unique: true,allowNull: false,type: DataTypes.STRING,}
};
class Pet extends Model { }
Pet.define = () => Pet.init(schema,{ sequelize },{ timestamps: false });
Pet.buildCreate = (params) => new Promise((resolve,reject) => {
let options = {
defaults: params,where: {
name: params.name
},returning: true
}
Pet.upsert(options)
.then((instance) => {
resolve(instance);
})
.catch(e => {
// message:'Cannot read property 'createdAt' of undefined'
console.log(`ERROR: ${e.message || e}`);
reject(e);
});
});
module.exports = Pet;
Upsert代码:
// handled in separate async method,including here for clarity
sequelize.sync();
// later in code,after db sync
Pet.buildCreate({ name: 'Fido' });
在调试中,options
看起来正确:
{
defaults: {
name: 'Fido'
},returning:true,where: {
name: 'Fido'
}
}
我也尝试过findOrCreate
和findCreateFind
,它们都返回带有Cannot convert undefined or null to object
变体的错误。
我尝试在id: null
中加入params
,结果完全相同。
我成功的唯一方法是在参数中提供PK,但这显然不可扩展。
如何在不提供params PK ID的情况下向上插入Model实例?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)