2017-02-28 29 views
0

我正在为用户使用sequalization和关系。例如,用户可以是客户,也可以是员工。NodeJS Squalize - 不包括登录时的关系

我设置通过以下方式:

models.users.find({ 
     where: { id: id }, 
     include: [ 
      models.customers, 
     ], 
     limit: 1 
    }).then(function(result) { 

     done(null, result); 

    }); 

的主要问题是,并不是所有的用户都向客户或员工,但它似乎访问关系的唯一方法是使用include在登录状态。

我想做什么就能做的是不包括在登录的关系,只是使用user.customer和发现的关系,类似于我会在Laravel做

回答

1

你可以做的是使用instance.getAssociation()方法为了获取相关的模型

models.users.findById(id).then(function(user){ 
    user.getCustomer().then(function(customer){ 
     // here you obtain customer assigned to user with id = 1 
    }); 
}); 

编辑

我建议你按照你的第一个概念。在登录与include选项

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'); 
}); 

执行find查询为了确定是否user是您需要执行的查询返回客户对象客户,否则你没有任何选项来识别用户的类型。我还可以建议您添加一些type字段到user模型,可能是一些ENUM与值如customer, employee, regular定义什么样的用户它是。在创建新实例时,它将被设置为适当的值。

models.users.create(
    { 
     name: 'some name', 
     customer: { 
      // some customer attributes 
     }, 
     type: 'customer' 
    }, { 
     include: [ models.customers ] 
}).then((user) => { console.log(user); }); 

如果按照这种方式,那么你可以通过访问user.type随时查看用户的状态这将是上面ENUM值之一。

+0

不过,我可以使用'req.user.customer'来做到这一点吗? – Phorce

+0

取决于你如何实现它。我用我的建议更新了答案 – piotrbienias