簡體   English   中英

如何在Sequelize中使用belongsToMany?

[英]How to use belongsToMany in Sequelize?

我正在使用sequelize創建一個Web應用程序以連接到postgres數據庫。 我設法教自己如何使用hasMany和belongsTo來調用,創建和銷毀數據。 我在belongsToMany方面遇到麻煩。

在我的服務器中,我試圖創建一個Trips,將AboutToMany Users作為騎手,並添加一個與用戶ArebyToMany 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
      });
    });
  },

有沒有編程大師可以簡要解釋一下我如何通過這種關聯來創造旅程?

如果要設置多對多表,則不需要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;
    });
)};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM