2017-02-09 34 views
1

我有一個名爲orders的子表和一個order_items的子表。我需要獲取每個訂單的客戶訂單和相應的訂單項目。下面是模式:從MySql中的不同表中獲取父和子記錄(一對多)

訂單:

Id | Order_date | Order_value 
------------------------------- 
1234 | 2016-12-12 | 700.00 

訂單項目:

Id | ProductId | OrderId 
---------------------------- 
8847 | shirt_blue | 1234 
8848 | shirt_red | 1234 

我需要在JSON的最終結果,看起來像這樣:

{ 
    id: '1234', 
    order_date: '2016-12-12', 
    order_value: 700.00, 
    Items: [ 
     {id: '8847', productid: 'shirt_blue' }, 
     {id: '8848', productid: 'shirt_red' } 
    ] 
} 

什麼最簡潔最快捷的方式從MySql獲取這些記錄?如果它有任何區別,我正在使用NodeJS/Node-MySql。

當前我正在提取訂單記錄,並在我的應用層中循環訪問訂單記錄,並獲取訂單商品記錄並將它們附加到每條記錄。這不是很有效的做事方式。

回答

2

你可以給Sequelize拍一下,它是Node.js的ORM版本,支持MySQL,PostgreSQL,SQLite和MSSQL。 通過使用Sequelize,您可以創建反映數據庫表的模型。第一步是實例化sequelize本身:

var sequelize = new Sequelize('mysql://user:[email protected]:3306/dbname'); 

然後你可以創建模型:

var Order = sequelize.define('Order', { 
    order_date: Sequelize.DATE, 
    order_value: Sequelize.STRING 
}); 

Order.sync(); // this is run in order to reflect the changes in your database 

您還可以定義模型之間的關係(數據庫表)這樣的:

var OrderItem = sequelize.define('OrderItem', { 
    // attributes etc... 
}); 

OrderItem.belongsTo(Order); // this would add OrderId attribute to OrderItem, which is a Foreign Key to Order table 
Order.hasMany(Order); 

通過建立關係,您可以返回OrderItems指定的Order

Order.findById(1).then(function(order){ 
    order.getOrderItems().then(function(orderItems){ 
     // here you get all order items assigned to given order 
    }); 
}); 

這是非常舒適的解決方案,在創建模型(表格)和遷移它們。您還可以創建自定義SQL語句並通過sequelize實例直接運行它們。 查閱文檔,其中包含大量示例並精確描述大多數用例。

+0

謝謝,我會研究它。 – Koder

相關問題