je ces modèles:Sequelize joindre modèle source dans le modèle cible
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;
};
En raison des méthodes belongsTo Marteau et Spanner ont une colonne ToolID. Maintenant, je veux recevoir tous les ordres de réparation avec les informations de l'outil, donc je joins les outils dans les ordres de réparation.
RepairOrder.findAll({
attributes: ['ID', 'OrderNumber'],
include: [{
model: Tool, as: 'Tool'
}]
});
Mais je veux aussi savoir quel type (marteau ou Spanner) de l'outil est lors de la sélection de l'Ordre de réparation, alors comment puis-je me joindre à la fois dans l'outil? Quelque chose comme
RepairOrder.findAll({
attributes: ['ID', 'OrderNumber'],
include: [{
model: Tool, as: 'Tool',
include: [{'JOIN ON "Hammer"."ToolID" = "Tool"."ID"'},
{'JOIN ON "Spanner"."ToolID" = "Tool"."ID"'}]
}]
});
Fonctionne parfaitement, merci. – frichter