gpt4 book ai didi

sequelize.js - sequelize 使用 targetKey 定义与另一个模型的外键关联

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

根据文档,我可以使用 targetKeys 选项为特定列的另一个模型创建外键。我试图在我的以下模型中做到这一点:

module.exports = function(sequelize, DataTypes) {
var Booking = sequelize.define("Booking", {
//id: {type:DataTypes.INTEGER, primaryKey:true}, // auto-generate
bookingId: {type:DataTypes.INTEGER, primaryKey:true},
accId: {type:DataTypes.INTEGER},
description: {type:DataTypes.STRING(128)},
amount: {type:DataTypes.DECIMAL(15,2), allowNull:false}, // 0:prepaid, 1:postpaid
schDate: {type:DataTypes.DATE, allowNull:false},
createdBy: {type:DataTypes.INTEGER, allowNull:false},
modifiedBy: {type:DataTypes.INTEGER, allowNull:false}
},
{
tableName: "user_bookings",
timestamps: true,
paranoid: true,
classMethods: {
associate: function(models) {
Booking.belongsTo(models.Account, {foreignKey:'accId', targetKey:'accId'});
}
}
}
);
return Booking;
};

我的另一个表是这样的:
   module.exports = function(sequelize, DataTypes) {
var Account = sequelize.define("Account", {
//id: {type:DataTypes.INTEGER, primaryKey:true}, // auth-generate
userId: {type:DataTypes.INTEGER, primaryKey:true},
accType: {type:DataTypes.CHAR(1), allowNull:false}, // 0:prepaid, 1:postpaid
category: {type:DataTypes.INTEGER}, // reserved for future use
isDefault: {type:DataTypes.BOOLEAN, defaultValue:false}, // Is this the default wallet, (if the user has many wallets. )
balance: {type:DataTypes.DECIMAL(15,2), defaultValue:null},
creditLimit: {type:DataTypes.DECIMAL(15,2), defaultValue:null},
creditConsumed: {type:DataTypes.DECIMAL(15,2), defaultValue:null},
createdBy: {type:DataTypes.INTEGER, allowNull:false},
modifiedBy: {type:DataTypes.INTEGER, allowNull:false},
createdAt: {type:DataTypes.DATE, allowNull:false, get:function(){return this.getDataValue('createdAt').getTime()/1000;}},
updatedAt: {type:DataTypes.DATE, allowNull:false, get:function(){return this.getDataValue('updatedAt').getTime()/1000;}}
},
{
tableName: "user_accounts",
timestamps: true,
paranoid: true,
}
);
return Account;
};

创建这些表时,我期望第一个模型将创建一个外键到第二个模型。但这并没有发生。

我的 user_bookings 表显示为一个没有任何引用的独立表:
mysql> desc user_bookings;
+-------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+-------+
| bookingId | int(11) | NO | PRI | 0 | |
| accId | int(11) | YES | | NULL | |
| description | varchar(128) | YES | | NULL | |
| amount | decimal(15,2) | NO | | NULL | |
| schDate | datetime | NO | | NULL | |
| createdBy | int(11) | NO | | NULL | |
| modifiedBy | int(11) | NO | | NULL | |
| createdAt | datetime | NO | | NULL | |
| updatedAt | datetime | NO | | NULL | |
| deletedAt | datetime | YES | | NULL | |
+-------------+---------------+------+-----+---------+-------+
10 rows in set (0.01 sec)

我在这里做错了什么?提前致谢...

最佳答案

您的关联定义可能有问题:

Booking.belongsTo(models.Account, {foreignKey:'accId', targetKey:'accId'});

您的目标定义中没有属性 accId,在本例中为 Account 表。

看看 Target keys documentation

奖金:

使用 createdAt 时不需要声明 updatedAttimestamps: true 等属性

关于sequelize.js - sequelize 使用 targetKey 定义与另一个模型的外键关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37003705/

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