我有这些模特:
module.exports = function(sequelize, DataTypes) {
const Tool = sequelize.define('Tool', {
Price: {type: DataTypes.STRING(255)},
PurchaseDate: DataTypes.DATE,
});
return Tool;
};
module.exports = function(sequelize, DataTypes) {
const RepairOrder = sequelize.define('RepairOrder', {
OrderNumber: {type: DataTypes.STRING(255)}
}, {
classMethods: {
associate(models) {
RepairOrder.belongsTo(models.Tool, {as: 'Tool'});
}
}
});
return RepairOrder;
};
module.exports = function(sequelize, DataTypes) {
const Hammer = sequelize.define('Hammer', {
Color: {type: DataTypes.STRING(255)}
},
{
classMethods: {
associate(models) {
Hammer.belongsTo(models.Tool, {as: 'Tool'});
}
}
});
return Hammer;
};
module.exports = function(sequelize, DataTypes) {
const Spanner = sequelize.define('Spanner', {
Size: {type: DataTypes.STRING(255)}
},
{
classMethods: {
associate(models) {
Hammer.belongsTo(models.Tool, {as: 'Tool'});
}
}
});
return Spanner;
};
由于belongsTo方法,Hammer和Spanner都有一个ToolID列。 现在我想收到包含工具信息的所有修理订单,因此我将这些工具加入修理订单。
RepairOrder.findAll({
attributes: ['ID', 'OrderNumber'],
include: [{
model: Tool, as: 'Tool'
}]
});
但是我也想知道选择修理订单时工具的类型(锤子或扳手),那么如何将两者都加入工具? 像
这样的东西RepairOrder.findAll({
attributes: ['ID', 'OrderNumber'],
include: [{
model: Tool, as: 'Tool',
include: [{'JOIN ON "Hammer"."ToolID" = "Tool"."ID"'},
{'JOIN ON "Spanner"."ToolID" = "Tool"."ID"'}]
}]
});
答案 0 :(得分:0)
你不能,用你现在的模型定义。您可能会收到一条错误消息,指出Tool与Hammer(或Spanner)无关。
因此,您应该修改您的模型定义,如下所示: 在工具模型中,包含以下关联:
Tool.hasMany(models.Hammer, {as: 'Tool'});
Tool.hasMany(models.Spanner, {as: 'Tool'});
在此之后,您可以通过以下方式在Hammer和Spanner上加入工具:
RepairOrder.findAll({
attributes: ['ID', 'OrderNumber'],
include: {
model: Tool, as: 'Tool',
include: [{
model: models.Hammer,
as: 'Tool'
}, {
model: models.Spanner,
as: 'Tool'
}]
}
});