我正在尝试通过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
答案 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);
})
});```