我在表Foo中有一个复合主键,在Bar中有一个单一主键.当我使用belongToMany语法进行连接时,连接表中只显示一个主键组件(定义的第一个).我期待看到FooId、FooDate、BarId和state.

我正在使用MariaDb 10.4.21和sequelize v6.12.1如果这很重要的话.

  const Foo = sequelize.define("Foo", {
    id: {
      type: DataTypes.INTEGER, primaryKey: true, unique: true, allowNull: false
    },
    date: {
      type: DataTypes.DATEONLY, primaryKey: true, unique: true, allowNull: false
    },
  });

  const FooBar = sequelize.define("FooBar", {
    state: {  
      type: DataTypes.INTEGER
    }
  });

  const Bar = sequelize.define("Bar", {
    id: {
      type: Sequelize.INTEGER, primaryKey: true, unique: true, allowNull: false
    }
  });


  Foo.belongsToMany(Bar, { through: FooBar});
  Bar.belongsToMany(Foo, { through: FooBar});

我知道我可以只用一个主键来解决问题,但我想理解我的错误.提前谢谢你.

推荐答案

Sequelize不支持复合主键和外键,因此需要将Foo中的id作为唯一的键(理想情况下应该由DB生成),因此每个表的FooBar中都有一个外键列.

Mysql相关问答推荐

是否有一种方法可以在mysql中设置一列,使其自动成为该行的行号的值?

同一类型对象之间的多对多关系

如何改进对另一个表中多行的查询依赖性

如何在Sequelize中创建限制查询?

如果WHERE语句包含所有列,唯一键顺序是否重要?

MySQL多连接以获得单个结果集(使用MySQL max函数)

从MySQL JSON列中检索数组中的所有答案

在 MySQL 中,如何对 LIKE 查询进行批量更新,删除字符?

如何根据 R 中的价格范围将数据从一列复制到新列?

如何使用 express.js 和 react.js 删除连接表中的元素和关联元素

MySQL REGEXP 在没有 BINARY 模式的情况下区分大小写?

Golang Gorm 没有创建带有约束的表

INSERT ... 使用 WHERE 进行重复的密钥更新?

在 MYSQL 中按枚举字段排序

MYSQL_ROOT_PASSWORD 已设置但在 docker 容器中获取用户'root'@'localhost'的访问被拒绝(使用密码:YES)

Mysql中int(10)的最大大小是多少

mysql 数据类型仅存储月份和年份

如何通过一个语句描述数据库中的所有表?

如何将本地托管的 MySQL 数据库与 docker 容器连接

mysql GROUP_CONCAT 重复