【发布时间】:2020-06-11 06:44:06
【问题描述】:
operation_sav模型定义如下:
operation_sav.js
module.exports = function(sequelize, DataTypes) {
var operation_sav = sequelize.define(
"operation_sav",
{
id: {
type: DataTypes.INTEGER,
primaryKey: true,
allowNull: false,
autoIncrement: true,
unique: true
},
nom_operation: DataTypes.STRING,
status: {
type: DataTypes.ENUM(
"en_cours_livraison",
"en_reparation",
"repare",
"expedie"
),
defaultValue: "en_cours_livraison"
},
num_serie: DataTypes.STRING,
address_mac: DataTypes.STRING,
sous_garantie: DataTypes.BOOLEAN,
description: DataTypes.STRING,
adminId: DataTypes.INTEGER,
produitId: DataTypes.INTEGER,
status: {
type: DataTypes.ENUM(
"produit_recu",
"en_livraison",
"en_reparation",
"repare",
"en_expedition",
"expedie",
"annule"
),
defaultValue: "produit_recu"
}
},
{ timestamps: true }
);
return operation_sav;
};
注意有一个外部外键 adminId Admin表和Operation_sav表的关系定义如下:
/** admin Has Many operation_sav*/
model.operation_sav.belongsTo(model.admin, {
foreignKeyConstraint: true,
onDelete: "cascade"
});
model.admin.hasMany(model.operation_sav, {
foreignKeyConstraint: true,
onDelete: "cascade"
});
这是在 Operation_sav 表中创建一行的函数:
var createSavOperation = function(operationInformation) {
return models.operation_sav.create(operationInformation);
};
我用它来创建这一行:
{
"id": 4,
"nom_operation": "Répartion viwone plus",
"status": "produit_recu",
"num_serie": "5525ggffdd",
"address_mac": "ff:ff:ff:ff:ff",
"sous_garantie": true,
"description": "Panne bouton droit",
"adminId": 10,
"produitId": 6,
"updatedAt": "2020-02-27T09:22:47.430Z",
"createdAt": "2020-02-27T09:22:47.430Z"
}
请注意 adminId 为 10 而 operation_savId 为 4。所以我尝试通过运行这段代码来查看整个关联是否正常工作:
models.operation_sav.findByPk(4).then(operation_sav => {
admin = models.admin.findByPk(10);
admin.hasOperation_sav(operation_sav);
});
但是,我得到了这个错误:
未处理的拒绝类型错误:admin.hasOperation_sav 不是 功能
这是因为我在创建 operation_sav 行时手动写入了 adminId 值吗?
编辑 1: 当我添加此 console.log 行时:
admin = models.admin.findByPk(10);
console.log(admin instanceof models.admin); // false!!
admin.hasoperation_sav(operation_sav);
我得到 false 这没有任何意义,但它有点解释了为什么 sequelize 没有抛出 admin.hasoperation_sav is not a function 错误..
EDIT 2:我已经修复了 EDIT 1 像这样:
models.admin.findByPk(10).then(adminFound => {
console.log(
"admin is instance of models.admin",
adminFound instanceof models.admin
); // true
adminFound.hasoperation_sav(operation_sav);
});
但是,hasoperation_sav 仍然无法识别为函数。
【问题讨论】:
标签: node.js postgresql express orm sequelize.js