2017-04-13 43 views
0

我有這些模型:Sequelize結合源模型到目標模型

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

由於屬於關聯方法錘子扳手有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

你不能用你現在的模型定義。您可能會收到一條錯誤消息,該工具與錘子(或扳手)不相關。

所以,你應該如下修改模型的定義: 在你工具模型,包括以下關聯:

Tool.hasMany(models.Hammer, {as: 'Tool'}); 
Tool.hasMany(models.Spanner, {as: 'Tool'}); 

在此之後,您可以按以下方式對錘子和扳手連接工具:

RepairOrder.findAll({ 
    attributes: ['ID', 'OrderNumber'], 
    include: { 
     model: Tool, as: 'Tool', 
     include: [{ 
     model: models.Hammer, 
     as: 'Tool' 
     }, { 
     model: models.Spanner, 
     as: 'Tool' 
     }] 
    } 
}); 
+0

完美地工作,謝謝。 – frichter