gpt4 book ai didi

sqlite - 在批量插入预先存在的数据后,对 hasOne 关联的链接模型进行 Sequelize 返回 `null` 对象

转载 作者:行者123 更新时间:2023-12-03 19:26:22 26 4
gpt4 key购买 nike

我有一个 JSON 文件形式的预先存在的数据,我试图将其插入 Sequelize SQLite 表中。我有 2 个表: Master_VesselRequests 。有一个 Request.hasOne(Vessel) 关联,这意味着每个 request 都有一个与之关联的 vessel

连接这两个模型的关键是 vessel.Vessel_Name ,它是一个字符串。数据是从验证 key 的系统生成的,因此它是一致的(每个 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

    有人可以帮忙吗?

    最佳答案

    好的,这是因为我混淆了 Sequelize 的“词汇”,Request.hasOne(Vessel) 并不意味着 Request 会有一个 Vessel_Name 指向 Vessel 。正确的意思是读R->L,而不是L->R。

    该问题的解决方案是将关联从 hasOne 更改为 belongsTo 如下: Request.belongsTo(Vessel) ,因此现在将在 Request 上创建 FK。

    关联名称和语义的选择相当令人困惑!

    关于sqlite - 在批量插入预先存在的数据后,对 hasOne 关联的链接模型进行 Sequelize 返回 `null` 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44173330/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com