如何在两个模型之间创建多个关系?
问题描述:
使用:Ember 2.5.1,Ember Data 2.5.2与JSONAPIAdapter如何在两个模型之间创建多个关系?
我正在创建一个应用程序来跟踪店间库存转移。
我有一个名为转让表:
+----+---------------+-------------+----------------+
| 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 |
+-----+----------+-------------+------------+
在我看来,这两个表之间的关系是:
- 的转移属于(原产地)店
- 转让也属于(目的地)商店
- A商店可以有许多传输作为起源和目标商店。
如何在Ember Data中定义这些关系?
我最近在休息3年后选择Ember备份,对于如何定义这些关系或者他们是否正确,我感到非常困惑。其中一件事情真的把我抛弃了from_store_id和to_store_id在转移表的自定义名称。
任何见解欢迎。
如果它的事项我使用西纳特拉与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
当我看着这进一步我试图找出灰烬,数据是怎么知道哪些键相互映射,以创建关系。 我看起来这个例子是有效的,因为你在**仓库**模型中有** fromStoreId ** AND和** toStoreId **。 是否有必要为仓库模型定义两个键?他们将永远是一样的。在我的模型定义中,我只在我的**商店**表中列出一个** id **列。每个商店应该只有一个ID或这是我必须做的这种关系的工作? – Eric
对不起,这是我的错。我复制了同一个模型两次。我已经编辑了答案和烬tw。你不需要''storehouse'模型中的'fromStoreId'和'toStoreId',它们是'transfer'模型的属性。 –