【问题标题】:Replacing object id with coresponding name from other object用其他对象的对应名称替换对象 ID
【发布时间】:2017-11-14 08:10:33
【问题描述】:

我对 Angular 很陌生,所以我会尽可能清楚地描述这个问题。 我正在尝试制作单页应用程序,其中包含有关人与人之间交易的一些信息。作为后端,我使用 MySQL 数据库 + nodejs 作为后端服务器和 Angular 作为前端。

问题是我有一个人表,其中包含每个人的 ID 和名称、余额。 然后我有一张表,用于存储人们之间的所有交易(Id、Giver ID、Taker ID、Amount)。

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

我显然不知道如何管理这个。我考虑过循环处理事务对象并用名称替换数组中的每个 ID。 Something like in this post

交易对象:

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

Persons 对象:

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

所以我想用名称 Edgars 替换 giver_id 1,因为作为赠予者 ID 的 FK 与人员 ID 相匹配。

我不想要一个明确的答案,但至少有一种方法可以深入了解。

【问题讨论】:

    标签: mysql angularjs node.js angular


    【解决方案1】:

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

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

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

    【讨论】:

    • 这对我来说几乎是完美的。非常感谢!
    【解决方案2】:

    您可以从两个列表中映射一个新列表:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 2019-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-19
      • 2012-01-16
      相关资源
      最近更新 更多