【问题标题】:Sequelize: extra column in querySequelize:查询中的额外列
【发布时间】:2020-10-28 15:31:50
【问题描述】:

我有下表定义

产品表

const Product = sequelize.define('product', {
  name: { type: Sequelize.TEXT },
  amount: { type: Sequelize.DECIMAL },
  category: { type: Sequelize.BIGINT, field: 'categoryId' },
  brand: { type: Sequelize.BIGINT, field: 'brandId' },
  vendor: { type: Sequelize.BIGINT, field: 'vendorId' },
  status: { type: Sequelize.BIGINT, field: 'statusId' },
  image: { type: Sequelize.TEXT },
  stock: { type: Sequelize.INTEGER },
  description: { type: Sequelize.TEXT },
  model: { type: Sequelize.TEXT },
  code: { type: Sequelize.TEXT },
});

状态表

const Statuses = sequelize.define('statuses', {
  name: {
    type: Sequelize.TEXT
  },
});

协会

Product.belongsTo(Statuses, { foreignKey: 'statusId', as: 'productStatus'});

当我运行以下内容时:

product = await Product.findOne({
  where: {
    id: req.query.id
  }, 
  include: ['productStatus']
})

我收到以下查询:

SELECT 
"product"."id", 
"product"."name", 
"product"."amount", 
"product"."categoryId" AS "category", 
"product"."brandId" AS "brand", 
"product"."vendorId" AS "vendor", 
"product"."statusId" AS "status", 
"product"."image", 
"product"."stock", 
"product"."description", 
"product"."model", 
"product"."code",
"product"."createdAt", 
"product"."updatedAt", 
"product"."statusId", 
"product"."categoryId", 
"product"."vendorId", 
"product"."brandId", 
"productStatus"."id" AS "productStatus.id", 
"productStatus"."name" AS "productStatus.name", 
"productStatus"."createdAt" AS "productStatus.createdAt", 
"productStatus"."updatedAt" AS "productStatus.updatedAt", 
"productStatus"."status" AS "productStatus.status" 
FROM "products" AS "product" 
LEFT OUTER JOIN "statuses" AS "productStatus" ON "product"."statusId" = "productStatus"."id" 
WHERE "product"."id" = '1'

不知道为什么

"productStatus"."status" AS "productStatus.status" 

是否存在,它会导致未知列错误,因为我在状态表中没有该列

【问题讨论】:

  • 你有反向关联hasMany吗?如果可以,可以展示一下吗?
  • 正确的包含是include: { model: Statuses, as: 'productStatus' }
  • @Anatoly 我有这个 User.hasOne(Status, { foreignKey: 'status', as: 'UserStatus'}); ,一旦我把它注释掉,它工作得很好,很奇怪
  • 嗨@doublesharp 谢谢,我试过了,但没用 :-)
  • 也试试这个include: [ {model: Statuses, as: 'productStatus' }

标签: node.js postgresql sequelize.js


【解决方案1】:

User.hasOne(Status, { foreignKey: 'status', as: 'UserStatus'}) 表示 Status 具有不正确的 status 列。这就是为什么 Sequelize 知道 Status 模型有 status 列并将其添加到 SQL 查询中。

我想User 有status 列而不是Status。如果是这样,您只需要像这样更改关联:

User.belongsTo(Status, { foreignKey: 'status', as: 'UserStatus'})

【讨论】:

    猜你喜欢
    • 2020-10-04
    • 2018-08-31
    • 2018-09-11
    • 2015-01-12
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    相关资源
    最近更新 更多