续集外键目标vs源

时间:2017-12-07 18:54:04

标签: sequelize.js

我一直在使用sequelize,但从来没有真正理解return db.Video.Where(x => x.VideoName.StartsWith(search)); 实际上是如何工作的。在他们的文件中,他们说:

  

目标键是源模型上的外键列指向的目标模型上的列。

所以在以下情况下,哪个是目标?

foreignKey

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

1 个答案:

答案 0 :(得分:6)

我建议按以下步骤推理:

  1. 确定目标模型。这只是惯例:源是调用方法的模型,因此基本上是“符号左边的那个”。目标是另一个模型,所以'右边的那个'。
  2. 了解其中各种方法将外键hasOnehasMany放入目标; belongsTo将fk放在 source 上; belongsToMany将fk放在直通模型上。
  3. 了解外键(顾名思义)将引用“其他模型”(所以不是2下的那个)。因此hasOnehasMany将是对源模型的引用; belongsTo对目标模型的引用; belongsToMany对源模型的引用(您可以使用otherKey:引用目标模型)。
  4. belongsToMany是一种特殊情况,因为引入了第三个模型:直通模型(或连接表),其中存储了源和目标的外键。这有点改变了外键的“视角”,因此无法在外键引用方面与belongsTo完全比较。

    回答你的问题:

    • 目标是什么?:Subarea,分别为Book。
    • 使用哪个外键?:您的外键符合上述要求 说明。 belongsToMany是外键的例外 既不存储在源也不存在于目标,而是存储在直通模型上。