Bookshelf.js - 如何保存多对多关系?

11

我在尝试保存“多对多”关系中的数据时遇到了麻烦。

下面是我的模型:

 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);
     });
 });

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

1个回答

15

您需要在此处将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);
    });
});

在官方文档中也指出了:https://bookshelfjs.org/api.html#Collection-instance-attach


我尝试过这个,但它没有起作用。假设我的值数组看起来像这样:[1,2,3,4,5],它试图像这样插入列:insert into users_courses (course_id, user_id) values ('[1,2,3,4,5]', '1') - Joshua JLIVE Williams
http://bookshelfjs.org/#Model-attach链接已经无法访问,可能是它们移动或删除了。 - Sajjad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接