Node.js NodeJS Squalize——不包括在登录时的关系
我正在为用户使用序列化和关系。例如,用户可以是客户,也可以是员工 我通过以下方式进行设置:Node.js NodeJS Squalize——不包括在登录时的关系,node.js,sequelize.js,Node.js,Sequelize.js,我正在为用户使用序列化和关系。例如,用户可以是客户,也可以是员工 我通过以下方式进行设置: models.users.find({ where: { id: id }, include: [ models.customers, ], limit: 1 }).then(function(result) { done(null, result); }); 主要问题是并非所有用户
models.users.find({
where: { id: id },
include: [
models.customers,
],
limit: 1
}).then(function(result) {
done(null, result);
});
主要问题是并非所有用户都是客户或员工,但似乎访问关系的唯一方法是在登录状态下使用include
我希望能够做到的是在登录时不包括关系,只使用user.customer,它会找到关系,类似于我在Laravel中所做的,您可以使用该方法检索关联的模型
models.users.findById(id).then(function(user){
user.getCustomer().then(function(customer){
// here you obtain customer assigned to user with id = 1
});
});
编辑
我建议你遵循你的第一个概念。登录时,使用include选项执行find查询
为了定义用户是否为客户,您需要执行返回客户对象的查询,否则您没有任何选项来识别用户类型。我还建议您在用户模型中添加一些类型字段,可以是一些枚举,其值为customer、employee、regular,定义用户的类型。在创建新实例时,它将被设置为适当的值,例如
models.users.create
{
名字:'某个名字',
客户:{
//一些客户属性
},
类型:“客户”
}, {
包括:[型号.客户]
}.thenuser=>{console.loguser;};
如果按此方法操作,则可以随时通过访问user.type检查用户的状态,user.type将是上述枚举值之一。谢谢,但是,我可以使用req.user.customer执行此操作吗?取决于您是如何实现的。我已经用我的建议更新了答案
models.users.findById(id, {
include: [ models.customers ]
}).then(function(user) {
if ( user.customer ) console.log('User is a customer');
else console.log('User is not a customer');
});