2017-07-08 14 views
0

私はpostgresデータベースに接続するためにsequelizeを使用してWebアプリケーションを作成しています。私はhasManyとbelongsToを使ってデータを呼び出し、作成し、破壊する方法を自分自身で教えることができました。 belongsToManyに問題があります。belongsToManyをSequelizeで使用する方法?

私のサーバーでは、私は、belongsToManyユーザーがライダーとしてTripを作成しようとしていて、ユーザーbelongsToMany Tripもライダーとして関連付けを追加しました。私はPOST要求で旅行を作成できるようにしたいが、Idを呼び出す方法を理解することはできない。

///// MODELS 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 
     }); 
    }); 
    }, 

マストはありますか?どのようにして私がこの種の連合で旅を続けることができるかについての簡単な説明を与えることができたのですか?

答えて

0

多対多のテーブルを設定している場合は、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; 
    }); 
)}; 
関連する問題