gpt4 book ai didi

sequelize.js - 如何告诉 sequelize 在形成连接(关联)时使用的原始列名是什么?

转载 作者:行者123 更新时间:2023-12-03 22:17:39 26 4
gpt4 key购买 nike

在定义关联时,我不知道如何告诉 sequelize,我的外键(以及“父”表中的主键,如果需要)的名称是什么。

我使用的是多年前存在的 mssql (2008 r2) 数据库,我无法更改该数据库中的任何内容。

这是我的模型:

CuentasBancarias_sql = sequelize.define('cuentasBancarias_sql', {
id: { type: Sequelize.INTEGER, field: 'CuentaInterna', allowNull: false, autoIncrement: true, primaryKey: true },
}, {
tableName: 'CuentasBancarias'
});

Chequeras_sql = sequelize.define('chequeras_sql', {
id: { type: Sequelize.INTEGER, field: 'NumeroChequera', allowNull: false, autoIncrement: true, primaryKey: true },
numeroCuenta: { type: Sequelize.INTEGER, field: 'NumeroCuenta', allowNull: false },
}, {
tableName: 'Chequeras'
});


MovimientosBancarios_sql = sequelize.define('movimientosBancarios_sql', {
id: { type: Sequelize.INTEGER, field: 'ClaveUnica', primaryKey: true, autoIncrement: true, allowNull: false },
claveUnicaChequera: { type: Sequelize.INTEGER, field: 'ClaveUnicaChequera', allowNull: false },
}, {
tableName: 'MovimientosBancarios'
});

它们只是 3 个一对多表,带有主键和外键。这是一个非常正常、简单和常见的模型。

现在,这些是我的协会:
CuentasBancarias_sql.hasMany(Chequeras_sql, { foreignKey: 'NumeroCuenta'} );
Chequeras_sql.belongsTo(CuentasBancarias_sql, { foreignKey: 'NumeroCuenta' } );
Chequeras_sql.hasMany(MovimientosBancarios_sql, { foreignKey: 'ClaveUnicaChequera' } );
MovimientosBancarios_sql.belongsTo(Chequeras_sql, { foreignKey: 'ClaveUnicaChequera' } );

一切似乎都运行良好。但是,当我添加关联时,findAll 失败,因为它在 sql select 语句的 Join 中生成错误的列名。

所以,我想我的问题是:如果我有一个 sql server 数据库并且我不能改变任何东西,我怎么能告诉 sequelize 原始(数据库)列名(pk 和 fk),这样 sequelize 可以构造正确的连接,当做查询(findAll)?

这就是我编写查询的方式:
MovimientosBancarios_sql.findAndCountAll({
where: { ... },
include: [
{ model: Chequeras_sql, include: [ { model: CuentasBancarias_sql }] },
],
})

非常感谢您的帮助,再见...

最佳答案

正如我在上面的评论中所说,现在一切正常。问题已修复。
这就是我设置关系的方式:

CuentasBancarias_sql.hasMany(Chequeras_sql, { foreignKey: 'NumeroCuenta'} );
Chequeras_sql.belongsTo(CuentasBancarias_sql, { foreignKey: 'NumeroCuenta' } );
Chequeras_sql.hasMany(MovimientosBancarios_sql, { foreignKey: 'ClaveUnicaChequera' } );
MovimientosBancarios_sql.belongsTo(Chequeras_sql, { foreignKey: 'ClaveUnicaChequera' } );

Sequelize 正确地从foreingKey 子句中获取列名以形成Joins in Select 语句。这就是 Join 部分的结束方式:
FROM [MovimientosBancarios] AS [movimientosBancarios_sql] LEFT OUTER JOIN [Chequeras] AS [chequeras_sql] 
ON [movimientosBancarios_sql].[ClaveUnicaChequera] = [chequeras_sql].[NumeroChequera]
INNER JOIN [CuentasBancarias] AS [chequeras_sql.cuentasBancarias_sql]
ON [chequeras_sql].[NumeroCuenta] = [chequeras_sql.cuentasBancarias_sql].[CuentaInterna] AND [chequeras_sql.cuentasBancarias_sql].[Cia] = 37

注意 Inner Join 和 Cia = 30 部分,因为下面我的查询中的 where 部分:
MovimientosBancarios_sql.findAndCountAll({
where: filter,
include: [
{ model: Chequeras_sql, include: [ { model: CuentasBancarias_sql, where: { Cia: compania.numero } }] },
],
})

再次感谢,再见...

关于sequelize.js - 如何告诉 sequelize 在形成连接(关联)时使用的原始列名是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35324962/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com