gpt4 book ai didi

node.js - 如何将 Sequelize Auto 中的引用转换为 Sequelize 中的关联?

转载 作者:行者123 更新时间:2023-12-03 22:22:35 25 4
gpt4 key购买 nike

我使用 Sequelize Auto生成我的数据库定义。在定义中,它定义了哪些列是具有“references”属性的外键。然而,

$ cat models/account.js
/* jshint indent: 2 */

module.exports = function(sequelize, DataTypes) {
return sequelize.define('account', {
id: {
type: DataTypes.BIGINT,
allowNull: false,
primaryKey: true,
autoIncrement: true
},
parent_account_id: {
type: DataTypes.BIGINT,
allowNull: false,
references: {
model: 'account',
key: 'id'
}
},
master_account_id: {
type: DataTypes.BIGINT,
allowNull: false,
references: {
model: 'account',
key: 'id'
}
},
name: {
type: DataTypes.STRING,
allowNull: false
},
description: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: ''
},
enabled: {
type: DataTypes.INTEGER(1),
allowNull: false,
defaultValue: '1'
},
account_type_id: {
type: DataTypes.INTEGER(11),
allowNull: false
},
billing_account_id: {
type: DataTypes.BIGINT,
allowNull: false,
references: {
model: 'account',
key: 'id'
}
},
contact_name: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: ''
},
contact_email: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: ''
},
data_feeds_path: {
type: DataTypes.STRING,
allowNull: false,
defaultValue: ''
},
requests: {
type: DataTypes.BIGINT,
allowNull: false,
defaultValue: '0'
},
true_impressions: {
type: DataTypes.BIGINT,
allowNull: false,
defaultValue: '0'
},
clicks: {
type: DataTypes.BIGINT,
allowNull: false,
defaultValue: '0'
},
actions: {
type: DataTypes.BIGINT,
allowNull: false,
defaultValue: '0'
},
conversions: {
type: DataTypes.BIGINT,
allowNull: false,
defaultValue: '0'
},
status_id: {
type: DataTypes.BIGINT,
allowNull: false,
defaultValue: '1',
references: {
model: 'status',
key: 'id'
}
},
status_modified_date: {
type: DataTypes.DATE,
allowNull: false,
defaultValue: '0001-01-01 00:00:00'
},
date_created: {
type: DataTypes.DATE,
allowNull: false,
defaultValue: '0001-01-01 00:00:00'
},
date_created_user_id: {
type: DataTypes.BIGINT,
allowNull: false,
defaultValue: '1',
references: {
model: 'user',
key: 'id'
}
},
date_modified: {
type: DataTypes.DATE,
allowNull: false,
defaultValue: '0001-01-01 00:00:00'
},
date_modified_user_id: {
type: DataTypes.BIGINT,
allowNull: false,
defaultValue: '1',
references: {
model: 'user',
key: 'id'
}
},
date_deleted: {
type: DataTypes.DATE,
allowNull: true
},
date_deleted_user_id: {
type: DataTypes.BIGINT,
allowNull: true,
references: {
model: 'user',
key: 'id'
}
}
}, {
tableName: 'account'
});
};

如果我尝试在我的 Sequelize 查询中使用连接,我会收到:

Unhandled rejection Error: X is not associated to Y!
at Model.validateIncludedElement (/Library/WebServer/adstudio/node_modules/sequelize/lib/model.js:558:11)
at /Library/WebServer/adstudio/node_modules/sequelize/lib/model.js:440:29
at Array.map (native)
at Model.validateIncludedElements (/Library/WebServer/adstudio/node_modules/sequelize/lib/model.js:436:37)
at Model.aggregate (/Library/WebServer/adstudio/node_modules/sequelize/lib/model.js:1558:30)
at Model.<anonymous> (/Library/WebServer/adstudio/node_modules/sequelize/lib/model.js:1624:17)
at runCallback (timers.js:666:20)
at tryOnImmediate (timers.js:639:5)

这是我在从我的 Sequelize Auto 文件中导入模型定义后尝试用来添加关联的代码:

        console.log("Length of models: " + Object.keys(instance.sequelize.models).length)
for (var objectName in instance.sequelize.models) {
var model = instance.sequelize.models[objectName];
var columns = instance.sequelize.modelManager.getModel(model.name).attributes;
console.log('Processing foreign keys for ' + model.name);
for (var columnName in columns) {
var column = columns[columnName];
if (column.references) {
//if (column.references.key == column.references.model + '_id') {
if (model.name == column.references.model) {
console.log(" " + model.name + ' has one ' + column.fieldName.replace("_id", ""));
model.belongsTo(model, { as: column.fieldName.replace("_id", ""), foreignKey: column.fieldName });
} else {
//console.log(model.name + ' has one ' + column.references.model);
//console.log(column.references.model + ' has many ' + model.name);

// Will add foreignKey to the right-value table
//console.log(" " + model.name + " belongs to " + column.references.model + " on foreign key " + column.references.key);
//model.belongsTo(instance.sequelize.models[column.references.model], { foreignKey: column.references.key });

console.log(" " + column.references.model + " belongs to " + model.name + " on foreign key " + column.fieldName );
instance.sequelize.models[column.references.model].belongsTo(model, { foreignKey: column.fieldName });

console.log(model);

//model.hasOne(instance.sequelize.models[column.references.model]);
//instance.sequelize.models[column.references.model].hasMany(model);
}
}
}
}

我已经尝试了几乎所有的组合,但关联定义不正确,比如说 account.id 列是 account_audit_log 表的外键。我已经尝试了几乎所有可能的变体,但看不到可能的变体。

最佳答案

self 联想不应该定义为

Person.hasOne(Person, {as: 'Father'}) 
// this will add the attribute FatherId to Person

虽然我没用过sequelize auto

关于node.js - 如何将 Sequelize Auto 中的引用转换为 Sequelize 中的关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44596259/

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