【发布时间】:2019-02-21 15:28:44
【问题描述】:
我有一个名为 proxyPool 的模型,带有下一个字段:
poolId: {
type: DataTypes.INTEGER,
references: {
model: 'pool',
key: 'id',
},
field: 'pool_id',
},
proxyId: {
type: DataTypes.INTEGER,
references: {
model: 'proxy',
key: 'id',
},
field: 'proxy_id',
},
这是一个 N:M 表,用于两个具有下一个关联的表:
proxy.associate = (models) => {
proxy.belongsToMany(models.pool, {
through: models.proxyPool,
foreignKey: 'proxy_id',
});
};
和
pool.associate = (models) => {
pool.belongsToMany(models.proxy, {
through: models.proxyPool,
foreignKey: 'pool_id',
});
};
当我调用proxyPool.findOrCreate({where: {proxyId, poolId}}) 时,它说proxyPool.proxyId 列不存在,但在原始SQL 中我看到:
SELECT "id", "pool_id" AS "poolId", "createdAt", "updatedAt", "pool_id", "proxy_id"
FROM "portnoi"."proxy_pool" AS "proxyPool"
WHERE "proxyPool"."proxyId" = '3' AND "proxyPool"."pool_id" = '1' LIMIT 1;
为什么它使用poolId = pool_id 的别名而不使用proxyId = proxy_id 的模型中描述的别名?
【问题讨论】:
-
我会检查您是否在选择列表(您有
proxy_id)和您的 where 子句(您有proxyId)中使用完全相同的元素。 -
我假设如果在 where 子句中我使用
proxyId然后 sequelize 应该从模型定义中获取field键并使用proxyPool.proxy_id而不是proxyPool.proxyId生成 SQL -
最奇怪的是,如果我更改别名(假设为
proxyIdd)它会起作用。
标签: sql node.js postgresql sequelize.js