给定模型"Animal"和"Person",其中Animal BelongsTo Person和Person HasOne Animal,这是否意味着每个单独的Animal示例将总是具有与该Animal相关联的Person示例(由于动物属于人)?反之亦然,这是否意味着不是每个单个的Person示例都将有一个Animal示例与之相关联(由于Person有一个Animal)?
例如:
const sequelize = new Sequelize()
const Person = sequelize.define('Person', {
id: {
type: DataTypes.UUID,
primaryKey: true,
defaultValue: DataTypes.UUIDV4,
},
})
const Animal = sequelize.define('Animal', {
id: {
type: DataTypes.UUID,
primaryKey: true,
defaultValue: DataTypes.UUIDV4,
},
})
Person.hasOne(Animal)
Animal.belongsTo(Person)
async function foo () {
const animals = await Animal.findAll()
for (const animal of animals) {
/**
* Can I be certain that `person` **always** exists, given that Animal BelongsTo Person?
*
* In other words, does the BelongsTo Association from Animal to Person imply that Animal
* must **always** have a Person associated with the Animal?
*/
const person = await animal.getPerson()
}
const people = await Person.findAll()
for (const person of people) {
/**
* And the inverse; given that Person hasOne Animal, does this imply that not all People
* will have an Animal associated with them?
*/
const animal = await person.getAnimal()
}
}
我发现了一些与我的问题相关的文档,这让我很困惑:
原则上,这两个选项都是在Foo和Bar之间建立一对一关系的有效方法。但是,当我们说"Foo和Bar之间存在一对一关系"时,就不清楚这种关系是强制的还是可选的。换句话说,一个Foo可以没有一个Bar存在吗?2一个Bar可以没有一个Foo存在吗?3这些问题的答案可以帮助我们找到我们想要的外键列的位置。
这个来自文档的摘录让我想到,任何BelongsTo另一个模型的模型必须总是有一个与之关联的其他模型的示例,反之,任何HasOne另一个模型的模型有时不会有一个与之关联的其他模型的示例。
1条答案
按热度按时间jgzswidk1#
假设
Person
有一个Car
,Car
属于Person
,这意味着您可以在Cat
表中看到一个FK,它引用了该人员ID。接下来,定义“hasOne”和“belongsTo”的目的是让您在Model Querying中使用主题
Person
或Car
执行一些SQL搜索。