Arw*_*ett 5 node.js sequelize.js
假设我有一个用户和项目.比我在它们之间创建一个1:m的关联.
const User = sequlize.define("user", {...})
const Project = sequelize.define("project". {...})
User.hasMany(Project, { as: "projects" })
Run Code Online (Sandbox Code Playgroud)
比续集更能创造出来
addProject
Run Code Online (Sandbox Code Playgroud)
我自动的方法.
在其他情况下,我可能需要一个自定义功能.
例如,我可能想检查是否允许该用户选择项目.
在其他情况下,我可能还希望防止sequelize将这些关联方法添加到我的对象.
我的问题:
有没有办法创建自定义关联方法,如果没有,我至少可以定义验证方法吗?
我可以阻止续集添加特定的关联方法吗?
小智 1
- 有没有办法创建自定义关联方法,如果没有,我至少可以定义一个验证方法吗?
据我所知,无法创建自定义关联方法。您可以通过现场实现所有定制scope。例如:
models.User.belongsToMany(
models.List,
{
through: {
model: models.UserList,
scope: {
owner: true,
},
},
as: {
singular: 'OwnedList',
plural: 'OwnedLists',
},
});
Run Code Online (Sandbox Code Playgroud)
所以当我调用属性user.addOwnedList(...)时将默认为。1:m 关联也是如此,有些字段可以通过 来设置。您还可以有不同的关联范围并按字段划分它们。例如:ownerUserListtruescopeas
models.User.belongsToMany(
models.List,
{
through: models.UserList,
as: {
singular: 'List',
plural: 'Lists',
},
});
Run Code Online (Sandbox Code Playgroud)
因此,要查找所有List将使用的列表user.getLists(...)并与其他用户共享列表将使用“user2.addList(...)”,因此属性owner将是false。为了仅获取拥有的列表,将使用user.getOwnedLists(...)结果 SQL,默认情况下会如此WHERE "owner"=true。
- 我可以阻止sequelize添加特定的关联方法吗?
您无法阻止方法的创建,但可以在关联后立即将其删除。例如:
user.associate = function (models) {
models.User.belongsToMany(
models.List,
{
through: models.UserList,
as: {
singular: 'List',
plural: 'Lists',
},
});
models.User.belongsToMany(
models.List,
{
through: {
model: models.UserList,
scope: {
owner: true,
},
},
as: {
singular: 'OwnedList',
plural: 'OwnedLists',
},
});
/**
* Deleting method createList to prevent list creation
* without owner
* List must be created using user.createOwnedList
*/
delete user.prototype.createList;
};
Run Code Online (Sandbox Code Playgroud)
所以当有人调用方法时user.createList会导致undefined is not a function错误。这不是完美的解决方案,但至少它增加了更多的安全性和数据一致性,而没有复杂的约束。
| 归档时间: |
|
| 查看次数: |
463 次 |
| 最近记录: |