在 objection.js 中,.withGraphFetched()
方法用于在查询时预加载关联的模型数据,以避免 N+1 查询问题,提高查询效率。如果你想要对模型的所有查询自动包含 .withGraphFetched()
,可以通过自定义查询构建器来实现。
以下是一个基本的实现思路:
withGraphFetched
方法来实现自动包含关联数据的功能。.withGraphFetched()
。以下是一个简单的示例,展示如何通过扩展 QueryBuilder 来实现这一功能:
const { Model } = require('objection');
class AutoGraphFetchedQueryBuilder extends Model.QueryBuilder {
withGraphFetched() {
// 获取所有关联关系
const relations = this.modelClass.relationships.map(rel => rel.key);
// 自动添加 withGraphFetched
return this.withGraphFetched(relations);
}
}
class MyModel extends Model {
static get QueryBuilder() {
return AutoGraphFetchedQueryBuilder;
}
static get tableName() {
return 'my_models';
}
static get relationMappings() {
// 定义关联关系
return {
// ...
};
}
}
// 使用示例
MyModel.query().then(models => {
console.log(models);
});
Model.QueryBuilder
。withGraphFetched
方法,自动获取模型的所有关联关系,并调用 withGraphFetched
方法预加载这些关联数据。MyModel
。static get QueryBuilder()
方法指定使用自定义的查询构建器 AutoGraphFetchedQueryBuilder
。.withGraphFetched()
,自定义的查询构建器会自动处理。通过这种方式,你可以确保在 objection.js 中对模型的所有查询自动包含 .withGraphFetched()
,从而提高查询效率并避免 N+1 查询问题。
领取专属 10元无门槛券
手把手带您无忧上云