我必须为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)中定义BASTTO?
第二个问题是我没有在DistricArea中定义任何与Orders关联的字段。但是当我想使用查询DistricArea.findAll()时,它会出现以下错误:
列“OrderId”不存在
这就是我努力实现的目标:
我需要告诉我们有很多订单,每个订单都有一个DistricArea。
2条答案
按热度按时间wswtfjt71#
1.是的,您仍然需要在模型中定义字段
1.从上面的描述来看,订单模型应该是hasTo,而不是hasOne,在DistricArea模型中应该是hasMany,然后使用district_area_id字段定义sourceKey。
在此之后,在DistricArea.findAll()中,您将获得所有DistricArea,然后在其中,您将拥有一个Order数组,其中包含每个DistricArea的每个订单,或者在Order.findAll()调用中,您将看到带有字段district_area_id的所有订单
jdzmm42g2#
1.如果在模型中使用关联方法,
Sequelize
会自动将外键添加到模型中。但是,明确定义它是一个很好的做法。1.是的,你已经在
Order
模型中定义了belongsTo
。这将在DistrictArea
和Order
之间设置一对多关系第二个问题:错误“列'OrderId'不存在”
当您使用
hasMany
和belongsTo
定义One-To-Many关系时,Sequelize期望在其中定义了One-To的模型中找到一个外键。要修复此错误,需要在DistrictArea
中定义foreignKey
: