sequelize findone在查询中添加额外条件



我有带sequelize和mysql的节点js。我使用了以下语法来查找一个记录

await SkillPlanUser.findOne({
where: { deleted_at: {
[Op.ne]: null
},skill_plan_id: skill_plan_id, user_id: val },
})

但它的执行方式如下:

SELECT `id`,
`skill_plan_id`,
`user_id`,
`created_at`,
`updated_at`,
`deleted_at`
FROM `skill_plan_user` AS `skill_plan_user`
WHERE (`skill_plan_user`.`deleted_at` IS NULL
AND (`skill_plan_user`.`deleted_at` IS NOT NULL
AND `skill_plan_user`.`skill_plan_id` = '3'
AND `skill_plan_user`.`user_id` = '5'))
LIMIT 1;

在上述查询skill_plan_userdeleted_at为NULL,并且`。。。即使它没有被提及,也会被添加。

我不明白为什么要添加它,以及如何删除它?

请引导。

您似乎在模型选项中指示了paranoid: true(这意味着您使用了软删除功能(
当模型的偏执模式打开时,默认情况下,您将获得所有未删除的记录,因此无需指示此条件:

deleted_at: {
[Op.ne]: null
}

Sequelize会自己做(正如你已经发现的那样(。如果你想获得包括已删除记录在内的所有记录,你需要在findOne中指出paranoid: false,正如Emma在评论中提到的那样。

await SkillPlanUser.findOne({
where: { skill_plan_id: skill_plan_id, user_id: val },
}, { paranoid: false })

最新更新