gpt4 book ai didi

loopbackjs - 环回在单个请求中保存相关的hasmany模型

转载 作者:行者123 更新时间:2023-12-04 15:55:53 26 4
gpt4 key购买 nike

我有两个通过 hasMany 关系关联的模型。
Customer hasMany CustomerPhones
创建新的 Customer 时,我想将相关的 CustomerPhones 作为单个请求的一部分传递。这似乎是一个普遍的需求,如果我希望实现的方法错误,那么首选的方法是什么?

这是创建客户的网址:POST /api/Customers
上述网址的请求将是 req.body

{
"name": "Foo",
"customerPhones": [
{ "phoneNumber": "8085551234" },
{ "phoneNumber": "8085554567" }
]
}

环回模型配置:

Customer.json
{
"name": "Customer",
"base": "User",
"properties": {
"name": {
"type": "string",
"required": true
}
},
"relations": {
"customerPhones": {
"type": "hasMany",
"model": "CustomerPhone",
"foreignKey": ""
}
}
}

CustomerPhone.json
{
"name": "CustomerPhone",
"base": "PersistedModel",
"properties": {
"phoneNumber": {
"type": "string",
"required": true
},
"customerId": {
"type": "number",
"required": true
}
},
"relations": {
"customer": {
"type": "belongsTo",
"model": "Customer",
"foreignKey": "customerId"
}
}
}

最佳答案

我不确定这是否是最好的解决方案,但在这里我最终做了什么。我在 Customer 上创建了一个名为 createNew 的新 RemoteMethod。在这个新的远程方法中,我使用通过模型关系添加的方法。

Customer.createNew = function (data) {
var newCustomerId;
var customerPhones = null;

if (data.customerPhones && data.customerPhones.length) {
customerPhones = data.customerPhones;
}

return Customer
.create(data)
.then(function createCustomerPhones (customer) {
newCustomerId = customer.id;
if (customerPhones) {
customer.customerPhones.create(customerPhones);
}
})
.then(function fetchNewCustomerIncludeRelated () {
return Customer
.findById(newCustomerId, {
include: [ 'customerPhones' ]
});
})
.catch(function (err) {
return err;
});
};

为了使它更安全,我需要将它包装在一个事务中。我希望使用基本的 CRUD 方法,但是这个解决方案如果相当干净的话。

关于loopbackjs - 环回在单个请求中保存相关的hasmany模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34097530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com