我不确定如何执行特定类型的查询。
不确定Sequelize社区可能会调用它,但Codeigniter PHP框架将其称为“where_related”查询。
例如,假设我有两种对象类型:hotelRoom和roomStyle。
hotelRoom有属性roomNumber和相关的roomStyle对象。
假设我想找到所有与具有roomNumber<的hotelRoom对象相关的roomStyle对象。 200
Sequelize可以不使用原始SQL吗?
答案 0 :(得分:0)
查看eager loading和one-to-many关联的文档。
var HotelRoom = sequelize.define('HotelRoom', { roomNumber: DataType.INTEGER })
, RoomStyle = sequelize.define('RoomStyle');
// this will add the HotelRoomId column to RoomStyle table
HotelRoom.hasMany(RoomStyle);
// create an instance of room and make it the parent of a style
HotelRoom.create({ roomNumber: 5 })
.then(function(room){
return RoomStyle.create()
.then(function(style){
room.addStyle(style)
})
})
然后,您可以使用预先加载方法返回一系列房间号码的所有房间样式。
RoomStyle.findAll({
include: [{
model: HotelRoom,
attributes: [],
where: { roomNumber: { lt: 200 } } // i.e. "less than 200"
}]
})
.then(function(res){
console.log(res)
});
所有这些都假设房间和风格之间的关系是一对多的。要定义多对多关系,只需定义向另一个方向返回的关系(上面的代码仍然有效)。
// define a many-to-many relationship through the junction table "RoomsStyles"
HotelRoom.hasMany(RoomStyle, { through: RoomsStyles });
RoomStyle.hasMany(HotelRoom, { through: RoomsStyles });
干杯,希望这有帮助。