mysql - 使用 include 在何处进行 Sequelize

标签 mysql node.js join where-clause sequelize.js

我正在使用 sequelize 作为我的后端 ORM。 但是当我想要“where”连接表时,我遇到了问题。协会很好,但我不知道如何为“哪里”做。

这是我的代码:

router.get('/id_presta_struct_unit/:id_presta_struct_unit', (req, res) => {
  models.structures.findAll({
    include: {
      required: false,
      model: models.structures_proposer_prestations,
      where: {
        id_presta_struct_unit: req.params.id_presta_struct_unit
      },
      include: {
        model : models.unites_facturation,
      }
    }
  }).then(data => {
    res.writeHead(200, {'Content-Type': 'application/json; charset=utf-8'});
    res.end(JSON.stringify(data));
  });
});

我收到了这个请求

SELECT * FROM structures AS structures LEFT OUTER JOIN structures_proposer_prestations AS structures_proposer_prestations ON 结构.id_structure = structures_proposer_prestations.id_structure AND structures_proposer_prestations.id_presta_struct_unit = '1' 左外连接 unites_facturation 作为 structures_proposer_prestations.unites_facturationstructures_proposer_prestations 上。id_unite = structures_proposer_prestations.unites_facturation.id_unite;

但是我想得到

SELECT * FROM structures AS structures LEFT OUTER JOIN structures_proposer_prestations AS structures_proposer_prestations ON 结构.id_structure = structures_proposer_prestations.id_structure 左外连接 unites_facturation AS structures_proposer_prestations.unites_facturationstructures_proposer_prestations.id_unite = structures_proposer_prestations.unites_facturation.id_unite 哪里 structures_proposer_prestations.id_presta_struct_unit = '1';

我不知道该怎么办我没有找到有同样问题的帖子

谁能指出我正确的方向?

提前谢谢你。

编辑:

协会

models.structures_employer_ressources.hasMany(models.ressources, { foreignKey: 'id_ressource' });
models.ressources.belongsTo(models.structures_employer_ressources, { foreignKey: 'id_ressource' });

资源模型

module.exports = function(sequelize, DataTypes) {
  return sequelize.define('ressources', {
    id_ressource: {
      type: DataTypes.STRING,
      allowNull: false,
      primaryKey: true
    }
 ........
  },{
    tableName: 'ressources',
    updatedAt: 'date_modification',
    createdAt: 'date_creation'
  });
};

和structures_employer_ressources的模型

module.exports = function(sequelize, DataTypes) {
  return sequelize.define('structures_employer_ressources', {
    id_structure: {
      type: DataTypes.STRING,
      allowNull: false,
      primaryKey: true,
      references: {
        model :'structures',
        key: 'id_structure'
      }
    },
    id_ressource: {
      type: DataTypes.STRING,
      allowNull: false,
      primaryKey: true,
      references: {
        model :'ressources',
        key: 'id_ressource'
      }
    }
  },{
    tableName: 'structures_employer_ressources',
    updatedAt: 'date_modification',
    createdAt: 'date_creation'
  });
};

最佳答案

如果您将一个数组提供给初始连接的 where 子句,您可以对连接运行原始查询。

例子:

 models.structures.findAll({
where:[["[structures_proposer_prestations].[id_presta_struct_unit] = " + req.params.id_presta_struct_unit, null]],
    include: {
      required: false,
      model: models.structures_proposer_prestations,
      where: {
        id_presta_struct_unit: req.params.id_presta_struct_unit
      },
      include: {
        model : models.unites_facturation,
      }
    }
  }

数组也可以采用标准的对象语法,并由 AND 组合。我传入的 null 是针对参数的,因此绝对可以优化它以将 id 作为参数,只是不知道手头的语法。

关于mysql - 使用 include 在何处进行 Sequelize ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33527623/

相关文章:

php - cron 或 TRIGGER 持续 INSERTing table1 或 CURSOR (或替代方案)到 UPDATE 1m 行 InnoDB table2 而不锁定?

MySQL JOIN 3 个表

mysql - WHERE 条件与 NULL 无关,消除具有 NULL 值的行

node.js - 将 Node 作为 Cron 任务运行

mysql - 规范化使得跨多个表的连接变得困难

mysql - 无法连接到本地主机数据库

sql - 使用 select into outfile 指令写入文件头?

mysql - 如何做sql循环

node.js - 在 npm 测试阶段使用不同的数据库

node.js - 无法将插件添加到cordova项目。 npm错误?