2017-07-08 45 views
0

我正在创建一个使用sequelize连接到postgres数据库的web应用程序。我设法教自己如何使用hasMany和belongsTo来调用,创建和销毁数据。我与belongsToMany有问题。如何在Sequelize中使用belongsToMany?

在我的服务器中,我尝试创建一个属于许多用户的旅程,并为用户belongsToMany 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 
     }); 
    }); 
    }, 

有没有maste编程谁可以给我一个简单的解释,我怎么可以创建一个这种类型的关联在旅程中的旅程?

回答

0

如果您正在设置多对多表格,则您不需要hasMany,belongsTo在Trip和User上的内容。它看起来像你建立多对多表正确的,但如果你需要查询属于特定用户的旅行,你将需要添加另一个关联

Trip.belongsToMany(models.User, { 
    as: "driver", 
    through: "riders_on_trip", 
}); 

你得到的要点。

可以拿到车手IDS是这样的:

trip.getRiders().then(function (rider){ 
    return riders.map((rider) => { 
     return rider.id; 
    }); 
)};