我正在尝试在Loopback模型中实现子类,其中我有一个父表,其中包含公共字段和表,这些表是具有特定字段的父表的子项。
一个实际的例子:
Customer
包含适用于个人和组织的字段的模型
internal_id
created
Person
仅包含人员特定字段的模型
first_name
last_name
Organisation
仅包含特定于组织的字段的模型
registration_number
trade_name
基本上Person
继承自Customer
,而Organisation
也继承自Customer
。
我已按照Extending Models的本指南在Person
型号上创建Organisation
和Customer
型号
但是,当我在Person
创建POST
时,即通过http://0.0.0:3000/persons
时,他会在Person
表格中创建,但不会在Customer
表格中创建。
我假设当我基于另一个模型扩展模型时,在保存extendee模型时,它还会将公共字段保存到父模型中。
似乎并非如此。我怎样才能在Loopback中实现这个目标?
如果需要它们,请使用模型jsons:
customer.json
{
"name": "Organisation",
"plural": "Organisations",
"base": "Customer",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"registration_number": {
"type": "string",
"required": true
},
"trade_name": {
"type": "string",
"required": true
}
},
"validations": [],
"relations": {},
"acls": [],
"methods": {}
}
person.json
{
"name": "Person",
"plural": "Persons",
"base": "Customer",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"first_name": {
"type": "string",
"required": true
},
"last_name": {
"type": "string",
"required": true
}
},
"validations": [],
"relations": {},
"acls": [],
"methods": {}
}
organisation.json
{
"name": "Organisation",
"plural": "Organisations",
"base": "Customer",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"registration_number": {
"type": "string",
"required": true
},
"trade_name": {
"type": "string",
"required": true
}
},
"validations": [],
"relations": {},
"acls": [],
"methods": {}
}
答案 0 :(得分:1)
Loopback不提供这种类型的继承。模型只是模板,扩展模型只是创建一个新模板,其中包含从继承模型中获取的属性/方法。
我知道您想要抽象客户是个人还是组织。这看起来像是polymorphic relations的典型用例。多态关系允许您将一个模型与其他几个模型相关联。
以下是我将如何构建应用程序:
在customer.js
{
"name": "Customer",
// ...
"relations": {
"customerable": {
"type": "belongsTo",
"polymorphic": true
}
}, // ...
}
在person.js
{
"name": "Person",
// ...
"relations": {
"customer": {
"type": "hasOne",
"model": "Customer",
"polymorphic": {"as": "customerable", "discriminator": "person"}
}
}, // ...
}
在organization.js
{
"name": "Organization",
// ...
"relations": {
"orders": {
"type": "hasOne",
"model": "Customer",
"polymorphic": {"as": "customerable", "discriminator": "organization"}
}
}, // ...
}
我使用this example因为环回文档不是很清楚