环回:多对多关系,不能相反

时间:2018-08-25 20:08:48

标签: node.js many-to-many loopbackjs

我刚刚开始使用Loopback,并定义了两个模型,这些模型应该由琐碎的多对多关系来约束。

第一个模型是Customer,第二个模型是Pet

每个客户可以拥有不同的宠物,每个宠物可以由不同的客户拥有。

我使用loopback-cli创建关系,并在Pet模型作为参考的Customer模型上对其进行定义。代码中唯一的变化是:

/* customer.json */
"relations": {
  "Pets": {
    "type": "hasAndBelongsToMany",
    "model": "Pet",
    "foreignKey": ""
  }
}

此后,我发现了一组针对诸如/customers/{customerId}/pets之类的资源的各种操作的REST端点集。

我又如何获得关系的相反“一面”,就REST api而言,它是/pets/{petId}/customers

我不想创建新关系,也不想创建新模型。我只想重用已经包含我所需信息的当前MySQL表CustomerPet

预先感谢

1 个答案:

答案 0 :(得分:1)

处理 hasAndBelongsToMany 关系的正确方法是使用cli工具在两个方向上创建它:

  • 宠物 hasAndBelongsToMany 客户
  • 一个客户 hasAndBelongsToMany 宠物

这意味着数据库中有两个不同的表:PetCustomerCustomerPet

然后,当在两个实体之间创建新关系时,REST api自动处理两个表。有两种方法可以做到:

  • 创建一个新的相关实体,例如通过将新宠物发布到/customers/{:customerId}/pets
  • 在两个现有实体之间创建参考,例如通过将(空的主体就足够)放置到/customers/{:customerId}/pets/rel/{:petId}

我想复制具有多对多关系的数据库表是拥有这样一种灵活且易于使用的工具(如环回)的代价。