【问题标题】:Bookshelf.js - how to save many-to-many relationship?Bookshelf.js - 如何保存多对多关系?
【发布时间】:2015-04-27 05:59:56
【问题描述】:

我在以“多对多”关系保存数据时遇到问题。

这是我的模型:

 var CoursePeople = bookshelf.Model.extend({
     tableName: 'course_people'
 });

 var Course = bookshelf.Model.extend({
     tableName: 'course',
     users: function(){
         return this.belongsToMany(User);
     }
 });

 var City = bookshelf.Model.extend({
     tableName: 'city',
     users: function(){
         return this.hasMany(User);
     }
 });

 var User = bookshelf.Model.extend({
   tableName: 'people',
   city: function(){
     return this.belongsTo(City);
   },
   courses: function(){
     return this.belongsToMany(Course);
   }
 });

挑战在于,如何将我在数组中获得的 ID 插入到我的数据库(名为“course_people”)的联结表中?

到目前为止,这是我的代码:

 app.post('/users/', function(req, res) {
         console.log(req.body);
     var courses_ids = req.body.courses_ids; //array of ids
     delete req.body.courses_ids;
     new User(req.body).save().then(function(user){
         console.log(user.id);
         //How to store the ids in the junction table?

     }).catch(function(error){
         console.log(error);
     });
 });

再次感谢您的宝贵时间和建议!

【问题讨论】:

    标签: node.js orm bookshelf.js


    【解决方案1】:

    你想要在这里做的是将 id 附加到你的关系中,如下所示:

    app.post('/users/', function(req, 
      console.log(req.body);
      var courses_ids = req.body.courses_ids; //array of ids
      delete req.body.courses_ids;
      new User(req.body).save()
        .then(function(user){
         // this is important
          return user.courses().attach(courses_ids);
        }).catch(function(error){
           console.log(error);
        });
    });
    

    官方文档中也有说明:http://bookshelfjs.org/#Model-attach

    【讨论】:

    • 我试过了,但没有用,可以说我的值数组看起来像 [1,2,3,4,5] 它试图插入这样的列:insert into users_courses` (course_id, user_id) 值 ('[1,2,3,4,5]', '1')`
    猜你喜欢
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多