【发布时间】:2014-06-23 11:20:15
【问题描述】:
我很高兴使用 Sailsjs 的 beta v0.10,我担心一个关于多对多关联的问题:
比如说,Model-A 和 Model-B 通过两个属性具有多对多关联。 API 建议使用“add”方法将一个现有的 Model-A 对象附加到另一个 Model-B 对象的集合中,然后调用 Model-B 的“save”方法来进行更改持久的。这按预期工作,但文档还提到了有关保存方法的以下内容:
“这是一个实例方法。目前,实例方法不是事务性的。因此,建议您改用等效模型方法。”
但不幸的是,对 Model-B-update 的调用不会以多对多关系保持集合中的更改。 由于我不是数据库专家,如果这是我这边的错误、功能或误解,我会感到不安全。 非常欢迎任何建议!
本
编辑:这是对我的问题的更详细描述:
比如说,我们有两个模型,User和Group:
/**
* User.js
*
module.exports = {
attributes: {
[...]
memberOfGroups: {
collection: 'group',
via: 'members'
}
};
/**
* Group.js
*
module.exports = {
attributes: {
[...]
members:
{
collection: 'user',
via: 'memberOfGroups',
dominant: true
}
}
};
如您所见,这两个模型之间存在多对多关联。 假设有两个实例,每个模型一个。一个叫 aliceUser,另一个叫 publicGroup。我们想将 aliceUser 添加为 publicGroup 的成员。
当我这样做时
publicGroup.members.add(aliceUser.id);
publicGroup.save(function(err, saved) { ... });
我得到了预期的结果,aliceUser 正在成为 publicGroup 的成员:
{
"members": [
{
"email": "alice@cc.com",
"name": "alice",
"id": 4,
"createdAt": "2014-06-23T22:20:01.967Z",
"updatedAt": "2014-06-23T22:20:01.967Z"
}
],
"name": "public",
"createdAt": "2014-06-23T22:19:57.489Z",
"updatedAt": "2014-06-23T22:20:01.983Z",
"id": 1
}
现在这一切都令人满意,但文档说明了保存方法,它不是事务性的,可能会让我的用户和组不同步。文档继续:
因此,建议您改用等效模型方法。
说实话,我不确定他们的意思是什么,我猜 Sails 团队指的是使用 Group.update() 方法。
如果我这样做了
publicGroup.members.add(aliceUser.id); /*same as before*/
Group.update(publicGroup.id, publicGroup, function(err, updated) {
[...]
});
aliceUser 未附加为 publicGroup 的成员:
{
"members": [],
"name": "public",
"createdAt": "2014-06-23T22:19:57.489Z",
"updatedAt": "2014-06-23T22:20:01.983Z",
"id": 1
}
希望这能更详细地解释我当前的问题。如果您需要更多信息,请告诉我。非常感谢您的宝贵时间!
【问题讨论】:
标签: many-to-many associations sails.js waterline