Javascript 按自定义列对多对多顺序关联表进行续集

Javascript 按自定义列对多对多顺序关联表进行续集,javascript,sequelize.js,Javascript,Sequelize.js,我正在用electron和MySQL构建一个桌面应用程序 1-如何在多对多关联中按自定义列对关联表结果排序 //Company model const Company = sequelize.define("Company", { name: { type: DataTypes.STRING, allowNull: false, }, }); //Branch Model

我正在用electron和MySQL构建一个桌面应用程序

1-如何在多对多关联中按自定义列对关联表结果排序

 //Company model
    const Company = sequelize.define("Company", {
       name: {
       type: DataTypes.STRING,
       allowNull: false,
      },    
    });
    
    //Branch Model
    const Branch = sequelize.define("Branch", {
        name: {
        type: DataTypes.STRING,
        allowNull: false,
        },
        description: {
        type: DataTypes.STRING,
       },
    });

    //Associations
    //join table
    const CompanyBranch = sequelize.define("CompanyBranch",
    {
    order: {
      type: DataTypes.INTEGER,
    },
    });

    Branch.belongsToMany(Company, {
    through: CompanyBranch,
    as: "Branches",
    });

    Company.belongsToMany(Branch, {
    through: CompanyBranch,
    });
2-如何将结果映射到正确的形状,而不是嵌套对象

注意:在JavaScript
Branch.order/=>中未定义

我的问题

 //query
  const companies = await Company.findAll({include: [Branch]})
  //result
  {
   //company attrs
   Branches: [
   {id: 1, name: "branch 1", description: null, 
   CompanyBranch: { CompanyId: 1, ActivityId: 1,  BranchId: 1, order: 1}]
   }
我想要的结果

 {
   //company attrs
   Branches: [
   {id: 1, name: "branch 1", description: null,  order: 1}]
   }


  

您可以尝试使用
attributes
选项将
CompanyBranch.order
字段包括为分支机构的
order
字段:

const companies = await Company.findAll({
  include: [
  {
     model: Branch,
     attributes: ['id', 'name', 'description', [Sequelize.col('CompanyBranch.order'), 'order']]
  }
]})

Upd. 如果您希望按
CompanyBranch.order
订购,那么最好将关联从
Company
添加到
CompanyBranch
,并从
CompanyBranch
添加到
Branch
分别有许多
以下项)如下使用:

Company.hasMany(CompanyBranch);
贝朗斯托公司分公司(分公司);
...
const companys=wait Company.findAll({
包括:[
{
型号:CompanyBranch,
属性:['order'],
包括:[{
型号:分公司,
属性:['id','name','description']
},
}],
订单:['CompanyBranch','order','ASC']]
})

这样,即使在
CompanyBranch
级别,您也可以使用诸如
['AssociationName.field','alias']

之类的符号来指示希望从
CompanyBranch
Branch
获取哪些字段。解决方案是使用Sequelize literal to order by custom join table列

const companies = await Company.findAll({
include: [Branch],
order: [[Sequelize.literal("`Branches->CompanyBranch`.`order`"), "ASC"]]
})

不工作我得到了这个错误:SequelizeDatabaseError:未知列'field list'中的'branchs.CompanyBranch.order'知道如何按“order”对“branchs”排序吗列?如果您希望按该列排序,可能最好先包括
CompanyBranch
,然后包括
Branch
。我得到了以下信息:错误:包括意外。元素必须是模型、关联或对象。检查
CompanyBranch
Branch
是否实际上是模型的续集