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

问题描述:

使用: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 | 
+-----+----------+-------------+------------+ 

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

  1. 的转移属于(原产地)店
  2. 转让属于(目的地)商店
  3. A商店可以有许多传输作为起源和目标商店。

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

我最近在休息3年后选择Ember备份,对于如何定义这些关系或者他们是否正确,我感到非常困惑。其中一件事情真的把我抛弃了from_store_idto_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

+0

当我看着这进一步我试图找出灰烬,数据是怎么知道哪些键相互映射,以创建关系。 我看起来这个例子是有效的,因为你在**仓库**模型中有** fromStoreId ** AND和** toStoreId **。 是否有必要为仓库模型定义两个键?他们将永远是一样的。在我的模型定义中,我只在我的**商店**表中列出一个** id **列。每个商店应该只有一个ID或这是我必须做的这种关系的工作? – Eric

+0

对不起,这是我的错。我复制了同一个模型两次。我已经编辑了答案和烬tw。你不需要''storehouse'模型中的'fromStoreId'和'toStoreId',它们是'transfer'模型的属性。 –