在 Objection.js 中,设置 relationMappings 有什么好处?
In Objection.js, what's the benefit of setting up relationMappings?
我对 relationMappings 在 Objection.js 模型 class.
中的作用有点困惑
我认为一旦我们在模型中设置了关系映射,我们就会在每个查询中获得相关数据。但是,事实证明我仍然只有模型属性本身。
我还应该使用什么来获取查询中的相关数据吗?
关系映射为模型语义提供了如何在需要时获取关系。除了主 table 的行之外,始终查询所有相关行对性能来说真的很糟糕。当您创建关系映射到模型时,您将不需要在每次需要查询关系时手动编写连接。它们还启用了许多其他反对功能,这需要信息如何在数据库中进行行关系。
要在查询中使用关系映射 Objection.js 要求在每个查询中您必须告诉您要使用 .withGraphFetched
或 .withGraphJoined
方法从主行获取哪些关系 https://vincit.github.io/objection.js/guide/query-examples.html#eager-loading
例如:
class Person extends Model {
static get tableName() {
return 'persons';
}
static get relationMappings() {
return {
pets: {
relation: Model.HasManyRelation,
modelClass: Animal,
join: {
from: 'persons.id',
to: 'animals.ownerId'
}
}
};
}
}
const people = await Person.query().withGraphFetched('pets');
// Each person has the `pets` property populated with Animal objects related
// through the `pets` relation.
console.log(people[0].pets[0].name);
console.log(people[0].pets[0] instanceof Animal); // --> true
当你用.insertGraph
插入嵌套对象数据时也使用映射,以便相关对象被插入到相关tables和外键引用等根据关系映射声明自动填充。
还有许多其他地方使用了它们,但我希望这能让您大致了解它们存在的原因。
我对 relationMappings 在 Objection.js 模型 class.
中的作用有点困惑我认为一旦我们在模型中设置了关系映射,我们就会在每个查询中获得相关数据。但是,事实证明我仍然只有模型属性本身。
我还应该使用什么来获取查询中的相关数据吗?
关系映射为模型语义提供了如何在需要时获取关系。除了主 table 的行之外,始终查询所有相关行对性能来说真的很糟糕。当您创建关系映射到模型时,您将不需要在每次需要查询关系时手动编写连接。它们还启用了许多其他反对功能,这需要信息如何在数据库中进行行关系。
要在查询中使用关系映射 Objection.js 要求在每个查询中您必须告诉您要使用 .withGraphFetched
或 .withGraphJoined
方法从主行获取哪些关系 https://vincit.github.io/objection.js/guide/query-examples.html#eager-loading
例如:
class Person extends Model {
static get tableName() {
return 'persons';
}
static get relationMappings() {
return {
pets: {
relation: Model.HasManyRelation,
modelClass: Animal,
join: {
from: 'persons.id',
to: 'animals.ownerId'
}
}
};
}
}
const people = await Person.query().withGraphFetched('pets');
// Each person has the `pets` property populated with Animal objects related
// through the `pets` relation.
console.log(people[0].pets[0].name);
console.log(people[0].pets[0] instanceof Animal); // --> true
当你用.insertGraph
插入嵌套对象数据时也使用映射,以便相关对象被插入到相关tables和外键引用等根据关系映射声明自动填充。
还有许多其他地方使用了它们,但我希望这能让您大致了解它们存在的原因。