2017-06-12 169 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; 
    } 
}