我最近正在使用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
}
我想在它们之间创建一个(用户)对多(帖子)关联。为此,我需要在模型中指定hasMany和belongsTo。
但是,我对参数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} ...
嗯...您上面有一个有趣的案例...如果您使用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使用哪些键,这就是为什么存在这些其他属性的原因。命名...希望这会有所帮助,如果没有,我可以为您提供很多示例。