使用sequelize.literal()替换

时间:2019-07-07 08:07:21

标签: mysql sql node.js express sequelize.js

我正在尝试通过sequelize.literal()查询使用替换项。

router.get('/posts/testapik', function(req, res)
{

    const user_id = req.session.user_id;

    const status ="accept"
  Posts.findAll({include:[{ model: Likes},{ model: Comments},{ model: Users}],
                where:{user_id:{[Op.in]:[sequelize.literal('SELECT `Follows`.receiver_id FROM `follows` AS `Follows` WHERE `Follows`.user_id=? and `Follows`.status=?',{ replacements: [user_id,status], type: sequelize.QueryTypes.SELECT })]}}

                })
  .then(users => 
    {

        res.send(users);
  })

});

但是它返回以下错误

original:
   { Error: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '? and `Follows`.status=?)' at line 1

3 个答案:

答案 0 :(得分:0)

这有效... 我用过这个user_id ='+ user_id +'

router.get('/posts/testapik', function(req, res)
{

    const user_id = req.session.user_id;

    const status ="accept"
  Posts.findAll({include:[{ model: Likes},{ model: Comments},{ model: Users}],
                where:{user_id:{[Op.in]:[sequelize.literal('(SELECT `Follows`.receiver_id FROM `follows` AS `Follows` WHERE `Follows`.user_id='+user_id+' and `Follows`.status="accept")')]}}

                })
  .then(users => 
    {
        console.log("Posts data Testing =>",users);
        res.send(users);
  })
    .catch((err)=>
    {
        console.error(err)
        res.status(501)
        .send({
                error : "error..... check console log"
              })
    })


});

答案 1 :(得分:0)

对于原始查询的替换,您必须使用以下格式编写查询内部的变量名称::userIdReplacement

const query = '(SELECT `Follows`.receiver_id FROM `follows` AS `Follows` WHERE `Follows`.user_id= :userIdReplacement and `Follows`.status="accept")';

db.sequelize.query(query, { replacements: { userIdReplacement : user_id }});

如果您有多个替换项,只需将其放在替换对象中,并用逗号分隔即可。

答案 2 :(得分:0)

要进行替换,您必须在查询对象内设置替换属性。

router.get('/posts/testapik', function(req, res)
{

    const user_id = req.session.user_id;

    const status ="accept"
  Posts.findAll({
include:[{ model: Likes},{ model: Comments},{ model: Users}],
replacements: [user_id,status],
                where:{user_id:{[Op.in]:[sequelize.literal('SELECT `Follows`.receiver_id FROM `follows` AS `Follows` WHERE `Follows`.user_id=? and `Follows`.status=?')]}}

                })
  .then(users => 
    {

        res.send(users);
  })

});```