2017-07-08 50 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; 
    }); 
)};