postgresql 标签:hasOne,BelongsToMany

jchrr9hc  于 2023-10-18  发布在  PostgreSQL
关注(0)|答案(2)|浏览(157)

我必须为DistrictAreaOrder建模,其中Order必须有一个DistrictArea示例。到目前为止,我已经做到了这一点:

Order.hasOne(models.DistricArea)

在迁移文件中,我使用了这个。

queryInterface.addColumn('Orders', 'district_area_id', {

        type: Sequelize.INTEGER,
        references: {
          model: 'DistricAreas',
          key: 'id'
        }

      })

我有两个问题如果我们在模型中使用关联的方法,我们必须显式地为我们的模型定义这些字段?

district_area_id: DataTypes.INTEGER

我是否需要在另一个模型(DistricArea)中定义BASTTO
第二个问题是我没有在DistricArea中定义任何与Orders关联的字段。但是当我想使用查询DistricArea.findAll()时,它会出现以下错误:
列“OrderId”不存在
这就是我努力实现的目标:
我需要告诉我们有很多订单,每个订单都有一个DistricArea。

wswtfjt7

wswtfjt71#

1.是的,您仍然需要在模型中定义字段
1.从上面的描述来看,订单模型应该是hasTo,而不是hasOne,在DistricArea模型中应该是hasMany,然后使用district_area_id字段定义sourceKey。

Order.belongsTo(models.DistricArea,{foreignKey: 'district_area_id'})
DistricArea.hasMany(models.Order, {foreignKey: 'district_area_id', sourceKey: 'id'})

在此之后,在DistricArea.findAll()中,您将获得所有DistricArea,然后在其中,您将拥有一个Order数组,其中包含每个DistricArea的每个订单,或者在Order.findAll()调用中,您将看到带有字段district_area_id的所有订单

jdzmm42g

jdzmm42g2#

1.如果在模型中使用关联方法,Sequelize会自动将外键添加到模型中。但是,明确定义它是一个很好的做法。
1.是的,你已经在Order模型中定义了belongsTo。这将在DistrictAreaOrder之间设置一对多关系
第二个问题:错误“列'OrderId'不存在”
当您使用hasManybelongsTo定义One-To-Many关系时,Sequelize期望在其中定义了One-To的模型中找到一个外键。要修复此错误,需要在DistrictArea中定义foreignKey

DistrictArea.hasMany(Order, {
  foreignKey: 'district_area_id',
  sourceKey: 'id'
});

相关问题