在Objection.js中,设置RelationMappings有什么好处?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Objection.js中,设置RelationMappings有什么好处?相关的知识,希望对你有一定的参考价值。
我对Objection.js模型类中的relationMappings感到困惑。
我以为,一旦在模型中设置了RelationMapping,我们将在每个查询中获取相关数据。但是,事实证明,我仍然只是Model属性本身。
还有其他我应该用来获取相关数据的查询吗?
关系映射为模型语义提供了在需要时如何获取关系的语义。总是查询除主表的行以外的所有相关行,对于性能而言确实很糟糕。当您创建用于模型的关系映射时,您不需要在每次查询关系时都手动编写联接。此外,它们还启用了许多其他异议功能,这需要信息来说明数据库中行关系的运行方式。
要在查询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
插入嵌套对象数据时也使用映射,以便将相关对象插入到相关表中,并根据关系映射声明自动填充外键引用等。
[还有许多其他地方被使用过,但是我希望这能大致说明它们为什么存在。
以上是关于在Objection.js中,设置RelationMappings有什么好处?的主要内容,如果未能解决你的问题,请参考以下文章
使用 objection.js 或 knex.js 在 postgres 中的字符串列的 json 数组中查询
在 Objection.js 中按急切结果计数排序记录并实现分页?
Objection.js:所有 where 子句添加后是不是可以用括号括起来?