How to make a nested insert in Bookshelf.js

How to insert such an object into two tables Book and Page

var book = { name: 'Hello', author: 'World', pages: [{ pagetitle: 'intro', book: 8 }, { pagetitle: 'chaptessr1', book: 8 }] }; 
+6
source share
2 answers

I think you are probably looking for some kind of shortcut, but don't think that there is one:

 var Promise = require('bluebird'); var Book = bookshelf.Model.extend({ tableName: 'books' }); var Page = bookshelf.Model.extend({ tableName: 'pages' }); var Pages = bookshelf.Collection.extend({ model: Page }); Book.forge({name: 'Hello', author: 'World'}).save() .then(function(book) { var pages = Pages.forge([ {pagetitle: 'intro', book: book.id}, {pagetitle: 'chatessr1', book: book.id} ]); return pages.invokeThen('save', null); }).then(function(){ // now all the pages and the book should be saved }); 
+3
source

Here is a link to the cleanest way, in the bookshelf docs: http://bookshelfjs.org/#Collection-instance-create

It will be something like this:

 return Promise.map(pages, (page) => book.related('pages').create(page)); 
0
source

Source: https://habr.com/ru/post/975399/


All Articles