我目前正在开发一个使用 loopback 的项目框架。这是非常令人沮丧的,因为我感觉好像我正在与这个框架斗争以完成一些极其简单的事情。当收到创建包含子级信息的父实例的请求时,我只需要创建新创建的关联实例。我已经让它工作到实际上创建了子级的程度,但是当我尝试设置属性以便我可以在响应中返回父级和子级时...它实际上并没有设置子级属性。这里发生了什么??? (编辑我假设模型实例实现了setter/getters以防止覆盖它设置的一些属性)
我在文档中找不到任何有关执行此类简单操作的内容。我能找到的最多的是嵌套模型的检索。当我的 parent 有很多 child 时,如果不发送 20 个请求,我似乎找不到任何关于创建它们的信息。
module.exports = function(Parent) {
Parent.on('dataSourceAttached', () => {
const create = Parent.create.bind(Parent);
Parent.create = async (data, opts) => {
const { Child } = Parent.app.models;
let instance;
try {
instance = await create(data);
if (data && data.children && Array.isArray(data.children)) {
const { id: parentId } = instance;
const children = await new Promise((resolve, reject) =>
Child.create(
data.children.map(m => Object.assign({}, m, { parentId })),
opts,
(err, res) => (err ? reject(err) : resolve(res))
)
);
instance.children = children;
console.log(instance.children === children); // false (wtf... #@#$#$%)
}
return instance;
} catch (err) {
// handle err
}
};
});
};
最佳答案
让我尝试用简单的术语解释一下。
假设您的父模型是Library
,您的子模型是Book
。所以现在图书馆有很多书籍,并且书籍属于
图书馆权利。
现在您可以创建Library
和Books
,如下所示
Library.create({
name: "Library"
}, function(err, library) {
// here library is created
// Now if you have set relation, one can create books inside library like below
library.books.create(book_array_data, function(err, books) {
// here books are created
})
})
这里我提到了Library.books
,其中books
是Library
模型中的关系名称
希望这能解决您的问题。
关于javascript - 使用父模型创建子记录并返回嵌套在响应中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44425569/