1

假设我有 2 个模型。

用户和俱乐部。

为了简化我的问题,假设 User 只得到了 Id,而 Clubs 得到了 ClubId 和 UserId,所以一个俱乐部可以有许多不同的用户。

这是我的问题:

例如,当我删除 ID 为 3 的用户时,我还想从具有此 ID 3 的俱乐部中删除所有用户。如何实现?

4

2 回答 2

8

Sails 尚不支持级联删除,但您可以自己处理:

User.destroy({id:3}).exec(function(err, users) {
   if (err) {return res.serverError();}
   var userIds = users.map(function(user){return user.id;});
   Club.destroy({user_id: userIds}).exec(function(err, clubs) {
      // do something
   });
});

destroy返回一个包含所有已销毁对象的数组。在您的情况下,由于您是按 ID 搜索,因此(希望)只会返回一个,但如果您使用的条件可能会同时破坏多个用户,您仍然可以使用上述代码清除所有相关的俱乐部。

于 2014-03-17T19:56:32.320 回答
6

您可以在删除任何模型后获取 afterDestroy 事件。简单的演示如下

在控制器中:

 Company.destroy({id: 12346798})
    .exec(function(e,r){

          return res.json(r);
    });

在 Company.js 模型中:

afterDestroy: function(destroyedCompany, cb) {

    var ids = _.pluck(destroyedCompany, 'id');

    if(ids && ids.length){

         Department.destroy({company_id: ids})
        .exec(function(e,r){
            CompanyArticle.destroy({company_id: ids}).exec(cb);
        });

    }
    else{
        cb();
    }

}
于 2015-03-17T05:21:03.157 回答