我有一个loopback-js API .
在其中我有一个相当复杂的产品模型,有许多相关的模型 . (元数据,技术要求,标签,域名,targetAudience,......)
我正在编写CMS,我希望用户能够轻松地复制产品,然后只需更改一些小东西,因为所有这些产品的许多数据都是相同的 .
在Loopback JS中有一个简单的方法吗?例如 product.saveAs();
我看到的唯一方法是从产品中获取数据,然后删除id并将数据作为新产品插入数据库中,然后对所有相关模型执行相同操作...
1 回答
由于我在网上找不到简单的答案,我想出了一个可以用模型实现的mixin . mixin定义了一个重复方法,它通过检查模型定义来复制模型,因此它遍历关系树,复制或链接相关项:
mixin file in common/mixins/duplicate.js
var async = require('async');
Update your model-config:
Define in model where needed, that you want to use the mixin:
Use at own risk
它远非完美,但就目前而言,它足以满足我的需求 . 也许其他人也可以使用它 .
目前它复制模型数据本身(包括belongsTo关系的外键和嵌入模型),hasMany(递归)和hasToAndBelongsToMany(非递归) . 如果你想要hasManyThrough功能,最好在'through-table'中添加一个额外的hasmany-relation,它将被复制 .
Things I might add in the future:
检查是否在有效的Loopback模型上调用mixins
添加选项以指定应包含哪些关系
添加has-many-through功能