2017-06-12 170 views
1

對於角度很大的我很新,試圖儘可能清楚地描述問題。 正在嘗試製作單頁應用,並提供一些關於人與人之間交易的信息。 AS用於後端,使用MySQL數據庫+ nodejs作爲後臺服務器,角色作爲前端。替換其他對象的相應名稱的對象標識

問題是我有一個帶有ID和姓名的人表,每個人的平衡。 然後我有一張桌子,我存儲了人員之間的所有交易(Id,Giver ID,Taker ID,金額)。

在前端,當我得到有關事務的信息時,我得到了提供者和接受者的IDS,但是我想用來自人表/對象的相應名稱替換它們。

我很明顯不知道如何管理這個。我想過循環引發交易對象,並用名稱替換陣列中的每個ID。 Something like in this post

的交易對象:

[Object]0: id: 1 giver_id: 1 taker_id: 5 amount: 50 

人反對:

[Object]0: balance:"-50" id:1 name:"Edgars"[Object]1: balance:"0" id:2 name:"Jānis" 

所以我想更換giver_id 1名Edgars因爲FK對送禮者ID maches人員ID。

我不想明確answear但ATLEAST的方式在挖

回答

2

我的建議是處理服務器端兩個表之間的連接。

UI將進行一次web服務調用來獲取事務。響應應該是一組事務,每個事務對象應該有提供者和接受者的名稱。

您將需要一個SQL查詢來連接這兩個表。一個簡單的連接SQL將如下所示。

select t.id as TRANS_ID, gp.name as GIVER, tp.name as TAKER, t.amount 
    from transaction t 
     join person gp on t.giver_id = gp.id 
     join person tp on t.taker_id = tp.id; 

到UI JSON響應應該是這樣的:

[ 
{ 
    "trans_id": 1, 
    "giver_name": "James", 
    "taker_name": "Michael", 
    "amount": 50 
}, 
{ 
    "trans_id": 2, 
    "giver_name": "Jim", 
    "taker_name": "Mike", 
    "amount": 100 
} 
] 

這樣,所有你的邏輯是在服務器端和您的用戶界面只顯示數據。

+0

這對我來說幾乎是完美的。非常感謝你! –

1

您可以映射兩份名單的一個新的列表:

var newList = transactionsList.map(function(t) { 
    var giver,taker; 
    giver = personList.find(function(p) { 
    return p.id == t.giver_id; 
    }); 
    taker = personList.find(function(p) { 
    return p.id == t.taker_id; 
    }); 

    if(giver && taker) { 
    t.giver_name = giver.name; 
    t.taker_name = taker.name; 
    return t; 
    } 
    else { 
    return undefined; 
    } 
}); 

或者,如果你只需要這一個對象:

function transformTransaction(t) { 
    var giver,taker; 
    var newTransaction = angular.copy(t); 
    giver = personList.find(function(p) { 
    return p.id == t.giver_id; 
    }); 
    taker = personList.find(function(p) { 
    return p.id == t.taker_id; 
    }); 

    if(giver && taker) { 
    newTransaction.giver_name = giver.name; 
    newTransaction.taker_name = taker.name; 
    return newTransaction; 
    } 
    else { 
    return undefined; 
    } 
}