JS Sequelize“Where Related”查询?

时间:2013-12-15 22:15:17

标签: javascript sql node.js orm sequelize.js

我不确定如何执行特定类型的查询。

不确定Sequelize社区可能会调用它,但Codeigniter PHP框架将其称为“where_related”查询。

例如,假设我有两种对象类型:hotelRoom和roomStyle。

hotelRoom有属性roomNumber和相关的roomStyle对象。

假设我想找到所有与具有roomNumber<的hotelRoom对象相关的roomStyle对象。 200

Sequelize可以不使用原始SQL吗?

1 个答案:

答案 0 :(得分:0)

查看eager loadingone-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 });

干杯,希望这有帮助。