gpt4 book ai didi

sequelize.js - 将外键目标与源序列化

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

我一直在使用 sequelize,但从不费心去真正了解 foreignKey 的实际工作原理。在他们的文档中,他们声明:

The target key is the column on the target model that the foreign key column on the source model points to.



那么在以下情况下,目标是什么?
    Route.belongsTo(models.Subarea, {
foreignKey: 'subareaId',
as: 'subarea',
});

Route.belongsToMany(models.Book, {
through: models.BookRoute,
foreignKey: 'routeId',
as: 'books',
});

我的困惑是为什么在第一种情况下我将外键放在 SubareaId 上,但在第二种情况下我把它作为 routeId。如果foreignKey 应该是sourceId,那么这两种情况都应该不是routeId?

最佳答案

我建议按以下步骤推理:

  • 确定源模型和目标模型。这只是约定:源是调用方法的模型,所以在符号中基本上是“左边的那个”。目标是另一个模型,所以是“右边的那个”。
  • 知道各种方法把外键放在哪里:hasOnehasMany把fk放在target上; belongsTo 将 fk 放在源代码上; belongsToMany 通过模型 将 fk 放在 上。
  • 理解外键(顾名思义)将引用“另一个模型”(因此不是 2 下的那个)。所以对于 hasOnehasMany 将是对源模型的引用;对于 belongsTo 目标模型的引用;对于 belongsToMany 对源模型的引用(您可以使用 otherKey: 引用目标模型)。
  • belongsToMany 是一种特殊情况,因为引入了第三种模型:直通模型(或连接表),源和目标的外键都存储在该模型上。这在一定程度上改变了外键的“视角”,因此您无法将它与 belongsTo 在外键引用方面进行完全比较。

    所以回答你的问题:
  • 目标是哪一个?:分别是分区和预定。
  • 使用哪个外键?:你的外键和上面的一致
    解释。 belongsToMany 作为外键很特别
    既不存储在源也不存储在目标上,而是存储在直通模型上。
  • 关于sequelize.js - 将外键目标与源序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47701890/

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