我正在创建一个使用 sequelize 连接到 postgres 数据库的网络应用程序。我已经成功地自学了如何使用 hasMany 和belongsTo 来调用、创建和销毁数据。我遇到了belongsToMany 的问题。
在我的服务器中,我正在尝试创建一个将属于多个用户作为骑手的旅行,并为用户作为骑手添加了一个对用户属于多多旅行的关联。我希望能够在 POST 请求上创建行程,但不知道如何调用 Id。
/////楷模
旅行.js
module.exports = function(sequelize, DataTypes) {
var Trip = sequelize.define("Trip", {
driverStart: DataTypes.STRING,
driverEnd: DataTypes.STRING,
riderStarts: DataTypes.ARRAY(DataTypes.STRING),
riderEnds: DataTypes.ARRAY(DataTypes.STRING),
tripDate: DataTypes.DATE,
tripHour: DataTypes.INTEGER,
availableSeats: DataTypes.INTEGER,
price: DataTypes.INTEGER,
tripIsActive: DataTypes.BOOLEAN
});
Trip.associate = function(models) {
Trip.hasMany(models.User, {
through: "riders_on_trip",
as: "riders",
onDelete: "CASCADE",
foreignKey: "riderIds"
});
Trip.belongsTo(models.User, {
as: "driver",
onDelete: "CASCADE",
foreignKey: "driverId"
});
};
return Trip;
};
用户.js
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define("User", {
email: DataTypes.STRING,
password: DataTypes.STRING,
profileImgUrl: DataTypes.STRING,
fName: DataTypes.STRING,
lName: DataTypes.STRING,
yearOfBirth: DataTypes.INTEGER,
gender: DataTypes.STRING,
ratings: {
type: DataTypes.ARRAY(DataTypes.INTEGER),
defaultValue: [5]
},
onTrip: {
type: DataTypes.BOOLEAN,
defaultValue: false
},
createdAt: {
type: DataTypes.DATE,
defaultValue: sequelize.literal('NOW()')
},
updatedAt: {
type: DataTypes.DATE,
defaultValue: sequelize.literal('NOW()')
}
});
User.associate = function(models) {
User.hasMany(models.RideRequest, {
onDelete: "CASCADE",
foreignKey: "riderId"
});
User.hasMany(models.DriveRequest, {
onDelete: "CASCADE",
foreignKey: "driverId"
});
User.hasMany(models.Notification, {
as: 'sender',
onDelete: "CASCADE",
foreignKey: "senderId"
});
User.hasMany(models.Notification, {
as: 'receiver',
onDelete: "CASCADE",
foreignKey: "receiverId"
});
User.belongsToMany(models.Trip, {
as: "riders",
through: "riders_on_trip",
onDelete: "CASCADE",
foreignKey: "riderIds"
});
User.hasMany(models.Trip, {
as: "driver",
onDelete: "CASCADE",
foreignKey: "driverId"
});
};
return User;
};
///// Controller
旅行.js
create: function create(req,res) {
// var decodedIds = req.params.riderIds.split("-");
var decoded = jwt.decode(req.query.token);
// console.log(decodedIds + '------------------ DECODED IDS ----------------');
model.User.set
return model.Trip.create({
driverStart: req.body.driverStart,
driverEnd: req.body.driverEnd,
riderStarts: req.body.riderStarts,
riderEnds: req.body.riderEnds,
tripDate: req.body.tripDate,
tripHour: req.body.tripHour,
availableSeats: req.body.availableSeats,
price: req.body.price,
tripIsActive: req.body.tripIsActive,
driverId: req.params.driverId,
riders: [{riderIds: 2}, {riderIds: 2}, {riderIds: 3}]
}).then(function (trip) {
console.log(trip.riderIds + '------------ RIDER IDS ---------------');
return res.status(201).json({
message: 'Trip created successfully',
obj: trip
});
}).catch(function (err) {
return res.status(400).json({
title: 'Error occured while creating trip',
error: err
});
});
},
有没有编程大师可以给我一个简短的解释,告诉我如何在 Sequelize 中用这种关联来创建旅行?
最佳答案
如果您要设置多对多表,则不需要 Trip 和 User 上的 hasMany、belongsTo 内容。看起来您正确设置了多对多表,但是如果您需要查询属于特定用户的行程,您将需要添加另一个关联
Trip.belongsToMany(models.User, {
as: "driver",
through: "riders_on_trip",
});
你明白了。
您可以像这样获取骑手 ID:
trip.getRiders().then(function (rider){
return riders.map((rider) => {
return rider.id;
});
)};
关于javascript - 如何在Sequelize中使用belongsToMany?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44982462/