如何在两个模型之间创建多个关系?

How to create multiple relationships between 2 models?

使用:Ember 2.5.1,Ember Data 2.5.2 与 JSONAPIAdapter

我正在创建一个应用程序来跟踪商店间的库存转移。

我有一个 table 叫做 transfers:

+----+---------------+-------------+----------------+
| id | from_store_id | to_store_id | transfer_notes |
+----+---------------+-------------+----------------+
| 1  | 12            | 32          | transfer to 32 |
| 2  | 9             | 13          | transfer to 13 |
| 3  | 32            | 9           | transfer to 9  |
+----+---------------+-------------+----------------+

每一行代表一次转运及其始发地和目的地商店。

我还有一个 table 叫做 stores:

+-----+----------+-------------+------------+
| id  | store_no | store_state | store_city |
+-----+----------+-------------+------------+
| 12  | tx12     | TX          | Dallas     |
| 9   | me09     | ME          | Bangor     |
| 32  | wa32     | WA          | Yakima     |
| 13  | tn13     | TN          | Memphis    |
+-----+----------+-------------+------------+

在我看来,这两个 table 之间的关系是:

  1. 转移属于(来源)商店
  2. 转账属于(目的地)商店
  3. 一家商店可以有多次转运,既可以是始发店也可以是目的地店。

如何在 Ember 数据中定义这些关系?

我最近选择 Ember 在中断 3 年后重新开始,我对如何定义这些关系或者它们是否正确感到非常困惑。真正让我失望的一件事是 from_store_idto_store_id转会table。

欢迎任何见解。

如果这很重要,我将 Sinatra 与 JSONAPI::Serializers

一起使用

您可以在一个模型内定义不同的关系,甚至与模型本身。 guides

中有更多信息

在这种情况下,您可以这样做:

//model storehouse.js
export default Model.extend({
  transferOrigins:hasMany('transfer', { inverse: 'storeOrigin' }),
  transferDestinations:hasMany('transfer', { inverse: 'storeDestination' }),
  storeNo:attr('string'),
  storeState:attr('string'),
  storeCity:attr('string')
});

//model transfer.js
export default Model.extend({
  storeOrigin:belongsTo('storehouse'),
  storeDestination:belongsTo('storehouse'),
  fromStoreId:attr('string'),
  toStoreId:attr('string'),
  transferNotes:attr('string')
});

由于您与同一个模型有多个关系,您帮助 ember-data 了解哪个 属性 与使用 inverse 有关。

这里有一个完整的例子 ember-twiddle