JS Sequelize“在哪里相关”查询?

Posted

技术标签:

【中文标题】JS Sequelize“在哪里相关”查询?【英文标题】:JS Sequelize "Where Related" Query? 【发布时间】:2013-12-15 22:15:17 【问题描述】:

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

不确定 Sequelize 社区会如何称呼它,但 Codeigniter php 框架将其称为“where_related”查询。

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

hotelRoom 具有属性 roomNumber,以及相关的 roomStyle 对象。

假设我要查找与 roomNumber

Sequelize 能否在不使用原始 SQL 的情况下做到这一点?

【问题讨论】:

为什么要立即投反对票?似乎是一个合理的问题,我在其他地方没有看到答案。 没有投反对票,但问题不是很清楚。有5个标签,没有代码...看看这是否有帮助meta.stackexchange.com/questions/156810/… @user3105482 可能由于缺少代码而被否决...据说我也开始使用 sequelize 并且无法找到某些查询类型的文档...所以我只是在做原始 SQL就目前而言,then 可能会将它们移到 SPROC 中以处理更复杂的。 这个问题与其说是“解决这个问题”,不如说是询问 Sequelize 是否可以做我想做的事情。我的想法是代码只会使问题复杂化。感谢您的反馈 See if this post helps. 【参考方案1】:

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

干杯,希望这有帮助。

【讨论】:

以上是关于JS Sequelize“在哪里相关”查询?的主要内容,如果未能解决你的问题,请参考以下文章

获取由 sequelize.js 生成的原始查询 [重复]

如何使用node.js控制sequelize中的内连接查询?

节点Js将原始查询续集为sequelize ORM

使用 Sequelize.js 和 PostgreSQL 在关联模型上查询 JSONB 字段

egg.js 24.10sequelize模型-查询单个

Node.js学习13~基于node-sequelize的查询器,附代码举例