PersistedModel关系名称可以与属性名称相同吗?
问题描述:
在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
}
}
...
}
你是如何处理的回送这种情况呢?
答
随着环回的当前状态,我认为这是一个坏主意。我在不同类型的关系上尝试了几次,这些关系与你提出的理由相同,在大多数情况下,如果它有效,它会破坏某些东西。看看文档和回送,我可以告诉关系的设计方式是关系名称和属性必须是不同的,即使它有效,它可能会在未来破坏。
对于这些东西,我会添加一个后缀到关系名称,例如billingAddressDetails
或billingAddressRelation
。
同时你也可以在github中打开一个问题,但我认为事情在将来会保持不变。
不知道你面临什么样的问题,但我所做的只是将关系命名为与相关模型相同,除了在camelCase而不是MixedCase中。例如'CustomerAccount hasMany Project',关系被称为'project'。反过来,在'项目属于CustomerAccount'中,关系被称为'customerAccount'。这可能不是你正在寻找的东西,但它适用于我,所以也许这是一个选择。 – Acapulco
如果我记得正确的话,我们以前遇到嵌入式模型在您序列化父模型时未被发射的问题。我认为这是因为数据'model.embedded'覆盖了函数'model.embedded()' – JBCP
根据我的经验,没有。相关模型被视为一个新的属性,所以如果您使用相同的名称,其中一个将会丢失。 –