簡體   English   中英

使用父模型創建子記錄並在響應中返回嵌套

[英]Creating child records with parent model and return nested in response

我目前正在開發一個使用環回框架的項目。 令人非常沮喪的是,我覺得我正在與這個框架作斗爭,以便完成一些非常簡單的事情。 我只需要在收到請求時創建新創建的關聯實例,以創建包含子項信息的父實例。 我已經讓它工作到它實際上創建子項但我嘗試設置屬性所以我可以返回響應中的父項和子項...它實際上並沒有設置子屬性。 這里發生了什么??? 編輯我假設模型實例實現setter / getters以防止覆蓋它設置的某些屬性)

我在文檔中找不到關於做這樣簡單的事情的任何內容。 我能找到的最多是檢索嵌套模型。 當我有一個有很多孩子的父母時,我似乎找不到創建它們的任何內容而不發送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 所以現在圖書館有很多圖書和圖書belongsTo圖書館吧。

現在您可以創建如下所示的LibraryBooks

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 ,其中booksLibrary模型中的關系名稱

希望這能解決你的問題。

我目前通過在所有模型實例上調用toJSON然后在返回我想要的形狀之前根據需要修改它來解決這個問題。 我希望必須有一些方法可以使用loopback做這個沒有這種類型的東西...但我仍然沒有想出來。 任何進一步的答案仍然非常受歡迎。

 module.exports = function(Parent) { Parent.on('dataSourceAttached', () => { const create = Parent.create.bind(Parent); Parent.create = async (data, opts) => { const { Child } = Parent.app.models; try { let children; const instance = await create(data); if (data && data.children && Array.isArray(data.children)) { const { id: parentId } = instance; children = await new Promise((resolve, reject) => Child.create( data.children.map(m => Object.assign({}, m, { parentId })), opts, (err, res) => (err ? reject(err) : resolve(res)) ) ); } const resp = Object.assign(instance.toJSON(), {children: children.map(child => child.toJSON()); return resp; } catch (err) { // handle err } }; }); }; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM