javascript 序列化数据库错误错误:列不存在

4uqofj5v  于 2022-10-30  发布在  Java
关注(0)|答案(1)|浏览(188)

当我尝试创建提供程序时,sequelize显然试图返回provider_id字段,但它来自用户表,而不是来自提供程序(请参见sql executed)。
在模型中是通过字段定义关系的,我在其他表中使用了相同的关系,并且工作得很好,我现在不知道为什么这不工作。
我用的是postgres数据库。
引发的错误:
名称:'序列化数据库错误',
父项:错误:列“provider_id”不存在
长度:112,
重要级别:“错误”,
代码:“42703”,
详细信息:未定义,
提示:未定义,
位置:“186”,
内部位置:未定义,
内部查询:未定义,
其中:未定义,
架构:未定义,
表:未定义,
列:未定义,
数据类型:未定义,
约束:未定义,
文件:'解析_关系. c',
行:“3337”,
例程:“错误缺少列”,
SQL:'INSERT INTO“提供者”(“标识”,“建议编号”,“创建时间”,“更新时间”,“公司标识”)VALUES(默认值,$1,$2,$3,$4)RETURNING“标识”,“建议编号”,“创建时间”,“更新时间”,“删除时间”,“提供者标识”,“公司标识”,“建议标识”;',参数:[ '00000000','2022年10月6日17:11:28.621 +00:00','2022年10月6日17:11:28.621 +00:00',1 ] },
原始:错误:列“provider_id”不存在
用户模型:

const { Model, DataTypes } = require('sequelize');

class User extends Model {
  static init(sequelize) {
    super.init(
      {
        name: {
          type: DataTypes.STRING,
          allowNull: false,
        },
        email: {
          type: DataTypes.STRING,
          allowNull: false,
        },
        password: {
          type: DataTypes.STRING,
          allowNull: false,
        },
        insuranceNumber: {
          type: DataTypes.STRING,
          allowNull: false,
        },
        phone: {
          type: DataTypes.STRING,
          allowNull: false,
        },
        type: {
          type: DataTypes.STRING,
          allowNull: false,
        },
      },
      {
        scopes: {
          noPassword: {
            attributes: { exclude: ['password'] },
          },
        },
        sequelize,
        paranoid: true,
        tableName: 'users',
      }
    );
  }
  static associate(models) {
    this.hasMany(models.Address, { foreignKey: 'userId', as: 'addresses' });
    this.belongsTo(models.Provider, { foreignKey: 'providerId', as: 'provider' });
    this.belongsTo(models.Customer, { foreignKey: 'customerId', as: 'customer' });
  }
}

module.exports = User;

提供程序模型:

const { Model, DataTypes } = require('sequelize');

class Provider extends Model {
  static init(sequelize) {
    super.init(
      {
        adviceNumber: {
          type: DataTypes.STRING,
          allowNull: false,
        },
      },
      {
        sequelize,
        paranoid: true,
        tableName: 'providers',
        underscored: true,
      }
    );
  }
  static associate(models) {
    this.belongsTo(models.Company, { foreignKey: 'companyId', as: 'companies' });
    this.belongsTo(models.Advice, { foreignKey: 'adviceId', as: 'advices' });
    this.hasOne(models.User, { foreignKey: 'providerId', as: 'user' });
  }
}

module.exports = Provider;

存储功能:

async store(req, res) {
    const { name, email, password, insuranceNumber, phone, type } = req.body;
    let { provider} = req.body;

    const { adviceNumber, companyId, adviceId } = provider;
    provider = await Provider.create({ adviceNumber, companyId, adviceId }, { raw: true });

    let user = await User.create(
      {
        name,
        email,
        password,
        insuranceNumber,
        phone,
        type,
        providerId: provider.id ,
      },
      { raw: true }
    );

    return res.json(user);
  }
jxct1oxe

jxct1oxe1#

似乎你所写的关系并不符合你的定义

static associate(models) {
    this.belongsTo(models.Company, { foreignKey: 'companyId', as: 'companies' });
    this.belongsTo(models.Advice, { foreignKey: 'adviceId', as: 'advices' });
    this.hasOne(models.User, { foreignKey: 'providerId', as: 'user' });
  }

在belongsTo中,foreignKey应该属于来源数据表索引键,因此它应该只来自提供者数据表,您已定义相关,但索引键不在结构描述定义中。

class Provider extends Model {
  static init(sequelize) {
    super.init(
      {
        adviceNumber: {
          type: DataTypes.STRING,
          allowNull: false,
        },
        adviceId: {
          type: DataTypes.STRING,
          allowNull: false,
        },
        companyId: {
          type: DataTypes.STRING,
          allowNull: false,
        },
      },
      {
        sequelize,
        paranoid: true,
        tableName: 'providers',
        underscored: true,
      }
    );
  }
  static associate(models) {
    this.belongsTo(models.Company, { foreignKey: 'companyId', as: 'companies' });
    this.belongsTo(models.Advice, { foreignKey: 'adviceId', as: 'advices' });
    this.hasOne(models.User, { foreignKey: 'providerId', as: 'user' });
  }
}

相关问题