【问题标题】:Can a PersistedModel relation name be the same as the property name?PersistedModel 关系名称可以与属性名称相同吗?
【发布时间】:2017-01-13 12:37:43
【问题描述】:

Loopback documentation 中,关系的名称总是与存储它们的属性不同。例如:

{
  "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
      }
   }
   ...
}

您如何处理 Loopback 中的这种情况?

【问题讨论】:

  • 不确定您面临什么样的问题,但我所做的只是将关系命名为与相关模型相同,除了在 camelCase 而不是 MixedCase 中。例如CustomerAccount hasMany Project,关系称为project。反之亦然,在Project belongsTo CustomerAccount 中,关系称为customerAccount。这可能不是您想要的,但它对我有用,所以也许它是一种选择。
  • 如果我没记错的话,我们之前在序列化父模型时遇到了嵌入式模型未发出的问题。我认为这是因为数据model.embedded 覆盖了函数model.embedded()
  • 根据我的经验,没有。相关模型被视为新属性,因此如果您使用相同的名称,其中一个会丢失。

标签: loopbackjs


【解决方案1】:

以环回的当前状态,我认为这是一个坏主意。我在不同类型的关系上尝试了几次,原因与您想出的相同,在大多数情况下,如果它有效,它会破坏某些东西。查看文档和环回,我可以看出关系的设计方式是关系名称和属性必须不同,即使它有效,将来也可能会中断。

对于这些事情,我会在关系名称中添加一个后缀,例如 billingAddressDetailsbillingAddressRelation

与此同时,您也可以在 github 中打开一个问题,但我认为未来一切都会保持不变。

【讨论】:

    猜你喜欢
    • 2018-04-06
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    相关资源
    最近更新 更多