【问题标题】:Sequelize doesn't use field alias from modelSequelize 不使用模型中的字段别名
【发布时间】: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


【解决方案1】:

您是否尝试过这样的查询?

proxyPool.findOrCreate({
    where: {
        proxyId: {
            [Op.eq]: proxyId,
        }, 
        ...
    }
})

【讨论】:

    猜你喜欢
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 2022-12-17
    相关资源
    最近更新 更多