Sequelize hasOne with BelongsToMany

时间:2019-08-03 13:29:28

标签: node.js postgresql express sequelize.js

我必须对 DistrictArea Order 进行建模,其中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”不存在”

所以这是我要实现的目标:

  

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

1 个答案:

答案 0 :(得分:0)

  1. 是的,您仍然需要在模型中定义字段

  2. 根据上面的描述,
  3. 对于订单模型应为 belongsTo ,而不是 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