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);

查询生成器有两个问题

  1. 范围被忽略(包括默认范围),如何在查询生成器中应用范围?
  2. 属性是骆驼大小写而不是零食大小写

通过阅读 sequelize 的源代码,我找到了解决方案,Utils.mapFinderOptionsmodel._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);