用其他对象的相应名称替换对象id

时间:2017-06-12 18:31:39

标签: mysql angularjs node.js angular

我对角度非常新,所以试着把问题描述为尽可能的清晰。 我想制作和单页应用程序,提供有关人与人之间交易的一些信息。 AS后端即时通讯使用MySQL数据库+ nodejs作为支持服务器,角度为前端。

问题是我有一个带有ID的人员表和每个人的姓名,余额。 然后我有一个表格,我存储人们之间的所有交易(Id,Giver ID,Taker ID,Amount)。

在前端,当我获得有关交易的信息时,我获得了给予者和接受者的IDS,但我想用来自人员表/对象的相应名称替换它们。

我显然不知道如何管理这个。我想到了循环事务对象并用名称替换数组中的每个ID。 shuffle

交易对象:

[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"

所以我想用名字Edgars替换giver_id 1,因为作为给予者ID的FK会使人员ID成为问题。

我不想要一个清晰的衣服,但至少要想深入了解。

2 个答案:

答案 0 :(得分:2)

我的建议是处理服务器端两个表之间的连接。

UI将进行一次webservice调用以获取事务。响应应该是一个事务数组,每个事务对象应该具有提供者和接受者的名称。

您需要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
 }
]

这样,您的所有逻辑都将位于服务器端,而您的UI只需显示数据。

答案 1 :(得分: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;
  }
}