使用Sequelize ORM创建多个INNER JOINS

时间:2015-08-13 09:04:42

标签: javascript mysql node.js sequelize.js

我正在使用Sequelize ORM和Node.js,我无法理解如何用它构建以下查询。

SELECT service.*, serviceCollection.*, client.companyName, client.idclient 
FROM service 
INNER JOIN serviceCollection 
ON service.serviceCollection_idserviceCollection = serviceCollection.idserviceCollection 
INNER JOIN client 
ON serviceCollection.client_idclient = client.idclient

当我在phpMyAdmin上尝试时,此查询可以正常运行。 复杂的是客户端模型与服务没有直接关系,因此在尝试执行此操作时:

Service.findAll({include : [ServiceCollection, Client]}).then(function(service){
    if(service) {
        res.status(200).json(service);
    }
});

我收到以下错误:

Unhandled rejection Error: client is not associated to service!

我如何准备查询,以便从 serviceCollection 中的外键获取客户端信息,而不是原始模型 - 服务 即可。 我无法在 客户端 上使用include,因为它会给我错误,我需要将其与其他方式相关联,我需要似乎无法在文档中找到解决方案。

1 个答案:

答案 0 :(得分:8)

您是否在servicecollection和客户端之间建立了关系?在这种情况下,你可以这样做:

Service.findAll({
  include : [
    { 
      model: ServiceCollection, 
      required: true,
      include: [{model: Client, required: true }]}
  ]
});

required: true创建内部联接,默认为左联接