【发布时间】:2017-07-08 04:24:47
【问题描述】:
我正在创建一个使用 sequelize 连接到 postgres 数据库的网络应用程序。我已经成功地自学了如何使用 hasMany 和 belongsTo 来调用、创建和销毁数据。我遇到了 belongsToMany 的问题。
在我的服务器中,我正在尝试创建一个属于ToMany 用户的行程作为骑手,并添加了一个与用户belongToMany Trip 的关联作为骑手。我希望能够根据 POST 请求创建行程,但不知道如何调用 Id。
///// 模型 trip.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;
};
user.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;
};
///// 控制器
trip.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 中创建具有这种关联的旅行?
【问题讨论】:
标签: javascript node.js postgresql http sequelize.js