【问题标题】:Sequelize hasOne with BelongsToMany用 BelongsToMany 续集 hasOne
【发布时间】:2019-08-03 23:03:42
【问题描述】:

我必须对 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) 中定义 belongsTo

第二个问题是我没有在 DistricArea 中定义任何与订单相关的字段。但是当我想使用查询 DistricArea.findAll() 时,会出现此错误:

“列“OrderId”不存在”

这就是我想要达到的目标:

我需要告诉我们,我们有很多订单,每个订单都有一个 地区。

【问题讨论】:

    标签: node.js postgresql express sequelize.js


    【解决方案1】:
    1. 是的,您仍然需要在模型中定义字段

    2. 根据您上面的描述,订单模型应该是 belongsTo 而不是 hasOne ,而 DistricArea 模型应该是 hasMany ,然后定义您的 sourceKey使用您的 district_area_id 字段。

      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

    【讨论】:

      猜你喜欢
      • 2021-03-11
      • 2020-12-16
      • 1970-01-01
      • 2019-07-05
      • 2017-10-20
      • 1970-01-01
      • 2020-02-03
      • 2014-06-30
      • 2021-01-10
      相关资源
      最近更新 更多