如何处理 EmberJS 客户端中的 many2many 对象?

How to deal with many2many objects in EmberJS client?

我有一个具有多对多关系的数据模型。假设我有一个 Producer 模型和一个 Customer 模块。一个顾客可以从任意数量的生产者那里购买,一个产品可以服务于任意数量的顾客。

在后端,我有三个表的标准关系配置:

我的 Ember 模型目前看起来像这样:

// models/producer.js
import DS from 'ember-data';

export default DS.Model.extend({
  customers: DS.hasMany('module'),
});

// models/customer.js
import DS from 'ember-data';

export default DS.Model.extend({
  producers: DS.hasMany('module'),
});

现在我正在处理固定装置,我所做的只是用 "targets" 的 ID 定义 customersproducers 数组。问题是,我迟早会切换到真正的 REST 后端,这意味着我必须处理模型不匹配问题。我想我必须选择:

我想这是一种非常常见的情况,我想知道解决该问题的最简洁方法是什么。提前致谢。

您的数据库不需要映射到您的 REST API。特别是您没有平面数据的限制(如今在某些数据库中也没有)。

如果您可以控制后端 API,我只会 return 回复:

获取/客户

{
  customers: [
    {id: 1, producers: [1, 2]},
    {id: 2, producers: []},
  ]
}

获取/生产者

{
  producers: [
    {id: 1, customers: [1]},
    {id: 2, customers: [1]}
  ]
}

您的 REST 后端应该是关心序列化和反序列化到数据库模型的后端,而不是您的前端应用程序。

如果您有无法立即修改的 API 内容(移动应用程序、第三方等),您的 REST API 自然会与您的后端模型脱节反正时间,给你数据转换工作。所以我真的很想强迫你做对 REST 有意义的事情。