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

时间:2016-06-10 04:36:47

标签: ember.js ember-data

使用:Ember 2.5.1,带有JSONAPIAdapter的Ember Data 2.5.2

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

我有一张名为转移的表格:

+----+---------------+-------------+----------------+
| 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  |
+----+---------------+-------------+----------------+

每一行代表转移及其来源​​和目的地商店。

我还有一个名为商店的表格:

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

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

  1. 转让属于(原产地)商店
  2. 转移属于(目的地)商店
  3. 商店可以作为原始商店和目的地商店进行多次转帐。
  4. 如何在Ember Data中定义这些关系?

    我最近在3年休息后选择了Ember,我对如何定义这些关系或者它们是否正确感到困惑。真正让我失望的一件事是传输表中 from_store_id to_store_id 的自定义名称。

    欢迎任何见解。

    如果重要的话我正在使用带有JSONAPI::Serializers

    的Sinatra

1 个答案:

答案 0 :(得分:3)

您可以在一个模型中定义不同的关系,甚至可以自己定义。 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

相关问题