我有一个JSON文件形式的预先存在的数据,我试图插入到Sequelize SQLite表中。我有2个表:Master_Vessel
和Requests
。有一个Request.hasOne(Vessel)
关联,这意味着每个request
都有一个vessel
关联。
连接两个模型的关键是vessel.Vessel_Name
,这是一个字符串。数据是从验证密钥的系统生成的,因此它是一致的(request.Vessel_Name
中存在vessel.Vessel_Name
,vessel.Vessel_Name
是唯一的)。
我想将这些数据加载到Sequelize托管表中。我正在创建模型如下:
var Request = sequelize.define('request', {
// other fields
Vessel_Name: {
type: Sequelize.STRING
}
}, {
tableName: 'Request'
});
var Vessel = sequelize.define('vessel', {
// other fields
Vessel_Name: {
type: Sequelize.STRING,
primaryKey: true
}
}, {
tableName: 'Master_Vessel'
});
并且,协会如下:
Request.hasOne(Vessel, {foreignKey: 'Vessel_Name', allowNull: true});
现在,我按以下步骤加载数据:
Vessel
模型Request
模型,关联并批量加载Request
模型一切运行良好,没有任何问题。但是当我尝试使用关联查询时如下:
Request.findOne()
.then(request => {
console.log(request.get())
request.getVessel()
.then(vessel => console.log(vessel))
});
request
实例包含Vessel_Name
外键,但vessel
实例为null
。
有人可以帮忙吗?
答案 0 :(得分:1)
好的,这是因为我得到了Sequelize'词汇'混淆,Request.hasOne(Vessel)
并不意味着Request
会有一个Vessel_Name
指向Vessel
。为了正确的含义,将其读作R-> L,而不是L-> R。
该问题的解决方案是将关联从hasOne
更改为belongsTo
,如下所示:Request.belongsTo(Vessel)
,因此现在将在Request
上创建FK。
很容易混淆关联名称和语义!