Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 联接表的Sequelize错误:DatabaseError[SequelizeDatabaseError]:列不存在_Node.js_Postgresql_Sequelize.js - Fatal编程技术网

Node.js 联接表的Sequelize错误:DatabaseError[SequelizeDatabaseError]:列不存在

Node.js 联接表的Sequelize错误:DatabaseError[SequelizeDatabaseError]:列不存在,node.js,postgresql,sequelize.js,Node.js,Postgresql,Sequelize.js,我正在尝试运行以下代码块,出于某种原因,查询试图将其插入标记为“users->user\u group”“userUuid”的列中,尽管我在项目中没有引用过字符串文本userUuid(通过搜索而不是在代码库中),但也要检查pg admin中的列(使用PostgreSQL),用户组表中的两列都是user\u uuid和group\u uuid,这两列都已正确验证和填充 const result = await group.findAll({ include: user, }); Postma

我正在尝试运行以下代码块,出于某种原因,查询试图将其插入标记为“users->user\u group”“userUuid”的列中,尽管我在项目中没有引用过字符串文本userUuid(通过搜索而不是在代码库中),但也要检查pg admin中的列(使用PostgreSQL),用户组表中的两列都是user\u uuidgroup\u uuid,这两列都已正确验证和填充

const result = await group.findAll({
  include: user,
});
Postman body返回以下错误 “提示”:“也许您想引用列“用户->用户组.用户组ID”。”

我有3个模型用户组和用户组。这些关系是根据文档和无数其他文章和视频定义的

用户模型

module.exports = (sequelize, DataTypes) => {
  const user = sequelize.define(
    "user",
    {
      uuid: {
        type: DataTypes.STRING,
        primaryKey: true,
        allowNull: false,
        unique: true,
      },
      username: {
        type: DataTypes.STRING,
        unique: true,
        allowNull: false,
    },
    {
      freezeTableName: true,
    }
  );

  user.associate = (models) => {
    user.belongsToMany(models.group, {
      // as: "userUuid",
      through: models.user_group,
      foreignKey: "user_uuid",
    });
  };

  return user;
};
群模型

module.exports = (sequelize, DataTypes) => {
  const group = sequelize.define(
    "group",
    {
      uuid: {
        type: DataTypes.STRING,
        primaryKey: true,
        allowNull: false,
        unique: true,
      },
      title: {
        type: DataTypes.STRING,
        unique: true,
        allowNull: false,
      },
    },
    {
      freezeTableName: true,
    }
  );

  group.associate = (models) => {
    group.belongsToMany(models.user, {
      // as: "groupUuid",
      through: models.user_group,
      foreignKey: "group_uuid",
    });
  };

  return group;
};
module.exports = (sequelize, DataTypes) => {
  const user_group = sequelize.define(
    "user_group",
    {
      uuid: {
        type: DataTypes.STRING,
        primaryKey: true,
        allowNull: false,
        unique: true,
      },
      user_uuid: {
        type: DataTypes.STRING,
        allowNull: false,
        references: {
          model: "user",
          key: "uuid",
        },
      },
      group_uuid: {
        type: DataTypes.STRING,
        allowNull: false,
        references: {
          model: "group",
          key: "uuid",
        },
      },
      author: {
        type: DataTypes.STRING,
        unique: true,
        allowNull: true,
      },
    },
    {
      freezeTableName: true,
    }
  );

  user_group.associate = (models) => {
    user_group.belongsTo(models.user, {
      foreignKey: "user_uuid",
    });
    user_group.belongsTo(models.group, {
      foreignKey: "group_uuid",
    });
  };

  return user_group;
};
用户组模型

module.exports = (sequelize, DataTypes) => {
  const group = sequelize.define(
    "group",
    {
      uuid: {
        type: DataTypes.STRING,
        primaryKey: true,
        allowNull: false,
        unique: true,
      },
      title: {
        type: DataTypes.STRING,
        unique: true,
        allowNull: false,
      },
    },
    {
      freezeTableName: true,
    }
  );

  group.associate = (models) => {
    group.belongsToMany(models.user, {
      // as: "groupUuid",
      through: models.user_group,
      foreignKey: "group_uuid",
    });
  };

  return group;
};
module.exports = (sequelize, DataTypes) => {
  const user_group = sequelize.define(
    "user_group",
    {
      uuid: {
        type: DataTypes.STRING,
        primaryKey: true,
        allowNull: false,
        unique: true,
      },
      user_uuid: {
        type: DataTypes.STRING,
        allowNull: false,
        references: {
          model: "user",
          key: "uuid",
        },
      },
      group_uuid: {
        type: DataTypes.STRING,
        allowNull: false,
        references: {
          model: "group",
          key: "uuid",
        },
      },
      author: {
        type: DataTypes.STRING,
        unique: true,
        allowNull: true,
      },
    },
    {
      freezeTableName: true,
    }
  );

  user_group.associate = (models) => {
    user_group.belongsTo(models.user, {
      foreignKey: "user_uuid",
    });
    user_group.belongsTo(models.group, {
      foreignKey: "group_uuid",
    });
  };

  return user_group;
};

非常感谢您的帮助,谢谢

您应该在
belongTomany
中指示
otherKey
选项以及
foreignKey
,以便在其他型号上指示外键列,否则您将以其他键的默认名称结束,请参见下文:

联接表中外键的名称(表示目标模型)或表示另一列类型定义的对象的名称(有关语法,请参阅Sequelize.define)。使用对象时,可以添加name属性来设置列的名称默认为目标名称+目标主键(您的案例:
用户
+
uuid


你应该像这样创造。b因为您遗漏了这个{}。

是的,答案是Sekulzie将几乎所有东西的命名顺序都弄乱了,从表名到列名(仅外键)。必须将所有内容从u更改为camelCase,因为显然他们为这些模型设置的下划线对象(下划线:true)有很多缺陷,