数据库
首页 > 数据库> > mysql – 如何在bookshelf.js中一次插入父表和子表

mysql – 如何在bookshelf.js中一次插入父表和子表

作者:互联网

我有一个名为companies的表,另一个名为companies_posts,其中company_posts.company_id是companies.id的外键.

假设我得到以下json:

  {

       "name" : "Teste",
       "username" : "teste1",
       "password" : "teste1",
       "email" : "teste2@teste",
       "photo" : "teste",
       "description" : "teste",
       "company_posts" : [
          {"text" : "oi"},
          {"text" : "olá"}
       ]

   }

bookshelf.js中是否有任何方法可以立即插入?我想,就像mongodb一样.或者我需要插入公司,获取lastInsertId然后立即插入每个company_posts?

谢谢.

编辑:(顺便说一句,我刚刚学会了如何选择使用withRelated和hasMany.现在我必须学习如何插入/更新)

解决方法:

不,bookshelf.js使用knex.js,它基于关系数据库.因此,您必须首先插入公司.在回调函数中,您可以获得插入的ID,也可以插入帖子.

您当然可以使用此事务,这在最近的knex.js更新中有了很大的改进.

我没有对此进行过测试,但我认为这样的事情或多或少会起作用:

var Company = bookshelf.Model.extend({
  tableName: 'companies',
  posts: function(){
    return this.hasMany(Post);
  }
});

var Post = bookshelf.Model.extend({
  tableName: 'posts',
  companies: function(){
    return this.belongsTo(Company);
  }
});

new Company().save({...}).then(function(company){
    new Post().save({
        ...
        company_id: company.get('id')
    }).then(function(post){
        //final result
    });
});

标签:mysql,node-js,bookshelf-js
来源: https://codeday.me/bug/20190702/1360008.html