gpt4 book ai didi

sql - Sequelize : Tables aren't associating properly

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

我正在创建一个旅行计划应用程序。我想使用的模型是用户、旅行、事件和租赁。
这就是我打算将它们关联的方式:
一个用户可以有很多次旅行、事件和租赁
许多旅行可以有许多事件和租赁
许多事件可以有许多租金
Table Associations
在我的 Node 服务器中,我创建了一个具有以下 Sequelize 关联的数据库文件:

User = sequelize.import('./models/user')
Trip = sequelize.import('./models/trip')
Activity = sequelize.import('./models/activity')
Rental = sequelize.import('./models/rental')

Activity.belongsTo(User)
User.hasMany(Activity, { as: 'Activities' })

Rental.belongsTo(User)
User.hasMany(Rental, { as: 'Rentals' })

Activity.belongsTo(Trip)
Trip.hasMany(Activity, { as: 'Activities' })

Rental.belongsTo(Trip)
Trip.hasMany(Rental, { as: 'Rentals' })

Rental.belongsTo(Activity)
Activity.hasMany(Rental, { as: 'Rentals' })
这是我的模型:
用户
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('user', {
firstName: {
type: DataTypes.STRING,
allowNull: false
},
lastName: {
type: DataTypes.STRING,
allowNull: false
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true
},
password: {
type: DataTypes.STRING,
allowNull: false
},
isAdmin: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false
}
})

return User;
}
旅行
module.exports = (sequelize, DataTypes) => {
const Trip = sequelize.define('trip', {
title: {
type: DataTypes.STRING,
allowNull: false
},
departLoc: {
type: DataTypes.STRING,
allowNull: false
},
arrivalLoc: {
type: DataTypes.STRING,
allowNull: false
},
startDate: {
type: DataTypes.DATE,
allowNull: false
},
endDate: {
type: DataTypes.DATE,
allowNull: false
},
travelMethod: {
type: DataTypes.STRING,
allowNull: true
},
reason: {
type: DataTypes.STRING,
allowNull: true
},
description: {
type: DataTypes.STRING,
allowNull: true
}
})
return Trip;
}
事件
module.exports = (sequelize, DataTypes) => {
const Activity = sequelize.define('activity', {
title: {
type: DataTypes.STRING,
allowNull: false
},
startDate: {
type: DataTypes.DATE,
allowNull: false
},
endDate: {
type: DataTypes.DATE,
allowNull: false
},
description: {
type: DataTypes.STRING,
allowNull: true
}
})
return Activity;
}
出租
module.exports = (sequelize, DataTypes) => {
const Rental = sequelize.define('rental', {
agency: {
type: DataTypes.STRING,
allowNull: false
},
item: {
type: DataTypes.STRING,
allowNull: false
},
startDate: {
type: DataTypes.DATE,
allowNull: false
},
endDate: {
type: DataTypes.DATE,
allowNull: false
},
description: {
type: DataTypes.STRING,
allowNull: true
}
})
return Activity;
}
但是,当我检查我的 pgadmin 时,我看到
  • 我的事件表有 userId、tripId 和一个不必要的 activityId 列
  • 我的出租表与它没有任何关联。

  • 每当我尝试在这些模型中插入新条目时,都会收到如下错误:
    PostMan Error Response
    如何关联我的表,以便获得所需的关联?

    最佳答案

    Sequelize 根据表名创建自己的列名,所以当你定义源表和目标表的双向关联时,给出明确的名称

    Activity.belongsTo(User, {
    foreignKey: { name: 'UserId', allowNull: false }, // column name for userId in activity table
    targetKey: 'UserId', // column name of id in User table
    });
    User.hasMany(Activity, {
    foreignKey: 'UserId', // name of column in Activity table
    sourceKey: 'UserId' // name of column in User table
    })
    像这样编写其余的关联并尝试。

    关于sql - Sequelize : Tables aren't associating properly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64236632/

    25 4 0