2017-01-09 87 views
1

Loopback documentation关系总是比它们存储在属性不同的名称,例如:在这种情况下PersistedModel关系名称可以与属性名称相同吗?

{ 
    "name": "Customer", 
    "base": "PersistedModel", 
    "idInjection": true, 
    "properties": { 
    "name": { 
     "type": "string" 
    } 
    }, 
    "relations": { 
    "address": { 
     "type": "embedsOne", 
     "model": "Address", 
     "property": "billingAddress", 
     "options": { 
     "validate": true, 
     "forceId": false 
     } 
    } 
    ... 
} 

注意address关系为billingAddress的属性。相反,当我们使用address的属性时,情况似乎会中断。

有时很难想出一个任意的形容词前置于属性。例如,假设关系是一个已经叫做BillingAddress而不是Address的模型。想要命名关系和属性billingAddress是自然的。

例如:

{ 
    "name": "Customer", 
    "base": "PersistedModel", 
    "idInjection": true, 
    "properties": { 
    "name": { 
     "type": "string" 
    } 
    }, 
    "relations": { 
    "billingAddress": { 
     "type": "embedsOne", 
     "model": "BillingAddress", 
     "property": "billingAddress", 
     "options": { 
     "validate": true, 
     "forceId": false 
     } 
    } 
    ... 
} 

你是如何处理的回送这种情况呢?

+1

不知道你面临什么样的问题,但我所做的只是将关系命名为与相关模型相同,除了在camelCase而不是MixedCase中。例如'CustomerAccount hasMany Project',关系被称为'project'。反过来,在'项目属于CustomerAccount'中,关系被称为'customerAccount'。这可能不是你正在寻找的东西,但它适用于我,所以也许这是一个选择。 – Acapulco

+0

如果我记得正确的话,我们以前遇到嵌入式模型在您序列化父模型时未被发射的问题。我认为这是因为数据'model.embedded'覆盖了函数'model.embedded()' – JBCP

+0

根据我的经验,没有。相关模型被视为一个新的属性,所以如果您使用相同的名称,其中一个将会丢失。 –

回答

1

随着环回的当前状态,我认为这是一个坏主意。我在不同类型的关系上尝试了几次,这些关系与你提出的理由相同,在大多数情况下,如果它有效,它会破坏某些东西。看看文档和回送,我可以告诉关系的设计方式是关系名称和属性必须是不同的,即使它有效,它可能会在未来破坏。

对于这些东西,我会添加一个后缀到关系名称,例如billingAddressDetailsbillingAddressRelation

同时你也可以在github中打开一个问题,但我认为事情在将来会保持不变。

相关问题