Javascript 按自定义列对多对多顺序关联表进行续集
我正在用electron和MySQL构建一个桌面应用程序 1-如何在多对多关联中按自定义列对关联表结果排序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
//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-如何将结果映射到正确的形状,而不是嵌套对象
注意:在JavaScriptBranch.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
是否实际上是模型的续集