假设我有 2 个模型。
用户和俱乐部。
为了简化我的问题,假设 User 只得到了 Id,而 Clubs 得到了 ClubId 和 UserId,所以一个俱乐部可以有许多不同的用户。
这是我的问题:
例如,当我删除 ID 为 3 的用户时,我还想从具有此 ID 3 的俱乐部中删除所有用户。如何实现?
假设我有 2 个模型。
用户和俱乐部。
为了简化我的问题,假设 User 只得到了 Id,而 Clubs 得到了 ClubId 和 UserId,所以一个俱乐部可以有许多不同的用户。
这是我的问题:
例如,当我删除 ID 为 3 的用户时,我还想从具有此 ID 3 的俱乐部中删除所有用户。如何实现?
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 搜索,因此(希望)只会返回一个,但如果您使用的条件可能会同时破坏多个用户,您仍然可以使用上述代码清除所有相关的俱乐部。
您可以在删除任何模型后获取 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();
}
}