2016-12-24 77 views
1

我想要做的是通过他们的用户名找到用户,并且还包括他们是否是当前用户的朋友。如何正确构建此Sequelize查询?

我想尝试用一个查询来做到这一点,这样我就可以减轻服务器上的负载。我倾向于认为,在用户名后面的用户名后,我将不得不做另一个查询,以查看他们是不是朋友。

exports.findUser = (req, res) => { 

    //Get the username of the person to find 
    var username = req.params.username.toLowerCase(); 

    if (!username) { 
     //No username given 
     res.status(400).send(); 
    } else if (username == req.user.get('username')) { 
     //Send back a 400 because we dont want users thinking there is someone with their username 
     res.status(400).send() 
    } 

    //Get a user where the username matches the one given 
    db.user.findOne({ 
     where: { 
      username: username 
     }, 
     attributes: [ 
      "id", 
      "username" 
     ], 
     include: [{ 
      model: db.friend, 
      where: { 
       //Or is used because we don't know who created the friendship 
       $or: [ 
        { 
         friendOneId: NEED THE ID OF THE USER IM SEARCHING, 
         friendTwoId: req.user.get('id') 
        }, 
        { 
         friendOneId: req.user.get('id'), 
         friendTwoId: NEED THE ID OF THE USER IM SEARCHING 
        } 
       ] 
      } 
     }] 
    }).then(function(user) { 
     if (user) { 
      res.json(user); 
     } else { 
      res.status(404).send(); 
     } 
    }, function(e) { 
     res.status(500).send(); 
    }); 
}; 

这里的要求

module.exports = function(sequelize, DataTypes){ 
    return sequelize.define('friend', { 
     friendOneId: { 
      type: DataTypes.INTEGER, 
      allowNull: false 
     }, 
     friendTwoId: { 
      type: DataTypes.INTEGER, 
      allowNull: false 
     } 
    }); 
}; 
+0

与您的问题无关,但您可以省略:.toJSON(),只需要用户在回复中 – DZDomi

+0

感谢您指出这一点 – ConnorB

+0

您能向我们展示您的朋友模型文件吗?或数据库结构? – DZDomi

回答

0

从我所看到的,你只需要删除,并从不同或查询的部分我的朋友模式,所以基本上是:

where : { 
    $or: [ 
     { 
      friendTwoId: req.user.get('id') 
     },   
     {  
      friendOneId: req.user.get('id'), 
     } 
    ] 
}, 
required: false 

此外,如果将必需属性设置为false,则查询也将返回所有其他用户,即使包含查询未显示任何结果

+0

但是,这将取得所有的友谊,我分开的权利?我只想看看我是否是我正在寻找的用户的朋友 – ConnorB

+0

我没有碰到这个 – ConnorB

+0

,您应该详细说明您的问题,查询中显示了什么? – DZDomi