Sequelize.hasMany / belongsTo中的ForeignKey是什么意思?

问题描述 投票:0回答:1

我最近正在使用Sequelize ORM。

我有两个桌子。一个是Users,另一个是Posts

这两个表的架构如下

Users {
  id: Integer,
  name: String,
  age: Integer
}

Posts {
  id: Integer,  // refers to the id of post itself
  author_id: Integer, // refers to the id of the author of this post
  title: String,
  content: String
}

我想在它们之间创建一个(用户)对多(帖子)关联。为此,我需要在模型中指定hasManybelongsTo

但是,我对参数foreignKey / sourceKey / targetKey的含义感到非常困惑。

说我已经通过迁移定义并创建了表。在这种情况下,作为外键的属性名称为author_id

我的猜测是,在belongsTo中,foreignKey的意思是“将在源表中成为ForeignKey的属性名称”?

但是在hasMany中,foreignKey表示“即将到来的外键引用的属性名称”

因此,foreignKey中的belongsTo将是author_id(在表Posts中),但是foreignKey中的hasMany将是id(在Users表中?)]

此外,sourceKey / targetKey是什么意思??

我最近正在使用Sequelize ORM。我有两张桌子。一个是Users,另一个是Posts这两个表的架构如下Users {id:Integer,name:String,age:Integer} ...

mysql orm sequelize.js rdbms
1个回答
0
投票

嗯...您上面有一个有趣的案例...如果您使用user_id而不是author_id,那么您可能会在不声明它们的情况下逃脱,因为续集可能会正确假定它们...但是,因为您将其命名为author_id,所以您的hasMany确实需要知道外键在您的帖子表中被命名为author_id ...假设您在user表中将自己的id命名为“ user”,而不是“ id”。...sequelize不会理解它,并且会能够推断出它要加入的对象,因此您可以说sourceKey =“ user”和foreignKey =“ author_id” ...为了进一步实现这一点,您可能会遇到数据库设计中需要指定targetKey的问题或otherKey的原因是某人正在将事情命名为怪异的……因此,就像您在上面的belongsTo author_id中所说的那样,它不应该因为它的加入而被映射回“用户”,所以您可以指定foreignKey =“ author_id”并otherKey =“ user” ...这些东西花了我一段时间来缠住我的头好吧,因为我没有设计数据库,而我针对它实现了graphql / sequelize ...因此,在我的联接中,我不得不广泛使用sourceKey,targetKey和otherKey等。

尝试并从逻辑上考虑它,这将更有意义...如果您的主键始终为“ id”,而foreignKey始终为“ tablename_id”,那么您就不必担心其他属性。 。,但是当命名不统一时,需要告诉sequelize使用哪些键,这就是为什么存在这些其他属性的原因。命名...希望这会有所帮助,如果没有,我可以为您提供很多示例。

© www.soinside.com 2019 - 2024. All rights reserved.