Sequelize 不更新表中的行

Posted

技术标签:

【中文标题】Sequelize 不更新表中的行【英文标题】:Sequelize not updating a row in table 【发布时间】:2020-07-11 18:28:53 【问题描述】:

我是第一次使用 sequelize。我的数据库中有一个名为feed 的表,其中包含IDcaptionurl 列。在我的控制器中,我有一个简单的功能,我正在更新表格中的一行:

router.patch('/:id', 
    requireAuth, 
    async (req: Request, res: Response) => 
        let  id  = req.params;
        const item =  await FeedItem.update( ...req.body , 
            where: 
              id: id
            
        );
        if (item === null) 
            return res.status(404).send( message: 'Feed not found' );
        
        res.send(item);
);

我正在发送如下所示的 json 正文:


    "caption": "NewTest",
    "url": "Newtest.jpg"

我看到数据在控制台中正确发送,但是当我发布到 id 为 2 的端点时,我得到了响应:

[
    1
]

我还可以在数据库中看到该行尚未更新。 我在这里做错了什么,如何更新表格中的一行并返回新的更新值?

【问题讨论】:

【参考方案1】:

FeedItem.update 方法返回受影响的行数。这就是您收到1 的原因。如果您需要 FeedItem 实例本身,您可以先检索它并更新实例:

let feedItem = await FeedItem.findById(id);
if (!feedItem) 
   return res.status(404).send( message: 'Feed not found' );

feedItem = await feedItem.updateAttributes(req.body);

return res.send(feedItem);

【讨论】:

但是,我想知道为什么我自己运行更新时行没有更新 看起来你的代码一切正常,它必须更新数据库中的记录

以上是关于Sequelize 不更新表中的行的主要内容,如果未能解决你的问题,请参考以下文章

如果表中的行不存在,我如何更新或插入它?

续集如何查找具有多个 where 子句和时间戳的行 > NOW()

建立Model

如何在 postgres 中使用“更新跳过锁定”而不锁定查询中使用的所有表中的行?

sequelize.query() 两次返回相同的结果

使用其他行的数据更新同一表中的行 SQL