Sequelize QueryGenerator 和作用域
Sequelize QueryGenerator and scope
const model = MyModel.scope(scopes);
const { queryGenerator } = model;
const queryOptions = {
scopes,
attributes,
include,
where,
order,
offset,
limit,
};
model._validateIncludedElements.bind(model)(queryOptions);
const cte = queryGenerator.selectQuery(
model.getTableName(),
queryOptions,
model
)
.slice(0, -1);
查询生成器有两个问题
- 范围被忽略(包括默认范围),如何在查询生成器中应用范围?
- 属性是骆驼大小写而不是零食大小写
通过阅读 sequelize 的源代码,我找到了解决方案,Utils.mapFinderOptions
和 model._injectScope
const model = MyModel.scope(scopes);
const { queryGenerator } = model;
const queryOptions = {
scopes,
attributes,
include,
where,
order,
offset,
limit,
};
model._injectScope(queryOptions);
model._validateIncludedElements.bind(model)(queryOptions);
Utils.mapFinderOptions(queryOptions, model);
const cte = queryGenerator.selectQuery(
model.getTableName(),
queryOptions,
model
)
.slice(0, -1);
const model = MyModel.scope(scopes);
const { queryGenerator } = model;
const queryOptions = {
scopes,
attributes,
include,
where,
order,
offset,
limit,
};
model._validateIncludedElements.bind(model)(queryOptions);
const cte = queryGenerator.selectQuery(
model.getTableName(),
queryOptions,
model
)
.slice(0, -1);
查询生成器有两个问题
- 范围被忽略(包括默认范围),如何在查询生成器中应用范围?
- 属性是骆驼大小写而不是零食大小写
通过阅读 sequelize 的源代码,我找到了解决方案,Utils.mapFinderOptions
和 model._injectScope
const model = MyModel.scope(scopes);
const { queryGenerator } = model;
const queryOptions = {
scopes,
attributes,
include,
where,
order,
offset,
limit,
};
model._injectScope(queryOptions);
model._validateIncludedElements.bind(model)(queryOptions);
Utils.mapFinderOptions(queryOptions, model);
const cte = queryGenerator.selectQuery(
model.getTableName(),
queryOptions,
model
)
.slice(0, -1);