多对多序列化:识别较低的camelCase别名,而尝试使用较高的CamelCase?

时间:2019-05-20 15:26:27

标签: javascript sequelize.js

我无法使用Sequelize查询多对多关联,我推测这与较低/大写问题有关。

我的别名和列名是 camelCase extraId),但是生成的查询似乎尝试使用 TitleCased ExtraId),但这从下面的错误消息中推断出来。


我想查询所有Products及其关联的Extras列表,然后尝试执行以下操作:

    const data = await models.Product.findAll(
      {
        include: [{
          model: models.Extra,
          as: 'extras'
        }]
      }
    );

但是,这给了我以下错误:

  

column extras->ProductExtras.ExtraId does not exist

我有三个表ProductsExtras及其关联表ProductExtras定义如下:

  const Product = sequelize.define('Product', {
    name: {
        allowNull: false,
        type: DataTypes.STRING
    }
  }, {});
  Product.associate = function(models) {
    Product.belongsToMany(models.Extra, {
      as: 'extras',
      through: 'ProductExtras'
    });
  };



  const Extra = sequelize.define('Extra', {
    code: DataTypes.INTEGER,
    desc: DataTypes.STRING
  }, {});
  Extra.associate = function(models) {
    Extra.belongsToMany(models.Product, {
      as: 'products',
      through: 'ProductExtras'
    })
  };



  const ProductExtras = sequelize.define('ProductExtras', {
    productId: DataTypes.INTEGER,
    extraId: DataTypes.INTEGER
  }, {});
  ProductExtras.associate = function(models) {
    ProductExtras.belongsTo(models.Product, {foreignKey: 'productId'});
    ProductExtras.belongsTo(models.Extra, {foreignKey: 'extraId'})
  };

对于此问题的任何见解或解决方案,将不胜感激。

1 个答案:

答案 0 :(得分:0)

您是否尝试过将外键添加到belongsToMany,如下所示?这就是我用来覆盖联接表的默认列名称的方法。

Product.associate = function(models) {
    Product.belongsToMany(models.Extra, 
      {
      as: 'extras',
      through: 'ProductExtras',
      foreignKey : 'extraId'
      }
);