Bookshelf.js 更新未返回预期数据

问题描述

Bookshelf.js 更新命令在更新数据库中的行后未返回预期数据。如果不使用 id-atrttibute,而是使用 where 子句为更新查询添加条件,则会观察到这一点。

先决条件: 我有以下虚拟表结构(如果有人想复制可以使用下面的查询):

CREATE TABLE `dummy` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,`first_name` varchar(20) NOT NULL,`last_name` varchar(20) NOT NULL,`status` tinyint(1) NOT NULL COMMENT '1:Active,9:Deleted',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

以下是表格中的行:

INSERT INTO `dummy` (`id`,`first_name`,`last_name`,`status`) VALUES (NULL,'Jai','Samtani','1');
INSERT INTO `dummy` (`id`,'Sam','S','Bharti','1');

使用 Bookshelf.js 的模型定义:

const Dummy = dbconnection.Model.extend({
    tableName: 'dummy',});

export default Dummy;

问题 #1:我想将 [1,2,3] id 的状态设置为 9,并且我正在使用以下查询

let deletedDummyData = await Dummy.forge().where('id','IN',[1,3]).save({status: this.configVal.STATUS.delete},{method: 'update',patch: true,debug: true});
console.log('deletedDummyData ===============>',deletedDummyData);

理想情况下,Bookshelf.js 应该返回所有 3 行,但它只返回 1 行。虽然 bookshelf.js 已经更新了 db 中的 3 行。

这是 bookshelf.js 返回的内容

{
  method: 'update',options: {},timeout: false,cancelOnTimeout: false,bindings: [ 9,1,3 ],__knexQueryUid: '3XAQVibd2zeX1ZPgEBmb_',sql: 'update `dummy` set `status` = ? where `id` in (?,?,?)'
}
deletedDummyData ===============> ModelBase {
  attributes: [Object: null prototype] {
    status: 9,id: 1,first_name: 'Jai',last_name: 'Samtani'
  },_prevIoUsAttributes: {},changed: [Object: null prototype] {},relations: {},cid: 'c1',_knex: null,id: 1
}

有没有人遇到过这样的问题,还是我使用了错误查询


问题 #2 ::我想将 first_name 为“Bharti”的行的 last_name 更新为“Sam”,下面是我正在使用的查询

let updatedDummyData = await Dummy.forge().where({first_name : "Bharti"}).save({last_name: "Sam"},debug: true});
console.log('updatedDummyData ==>',updatedDummyData);

理想情况下,我应该得到 first_name 为“Bharti”的行,但我得到了一些模糊的行。虽然在幕后,书架已经更新了db中的右行。 这是 bookshelf.js 返回的内容

{
  method: 'update',bindings: [ 'Sam','Bharti' ],__knexQueryUid: 'Mrf9z4J7wbQ753BXPkpG9',sql: 'update `dummy` set `last_name` = ? where `first_name` = ?'
}
updatedDummyData ==> ModelBase {
  attributes: [Object: null prototype] {
    last_name: 'Sam',id: 2,status: 9
  },cid: 'c2',id: 2
}

有没有人遇到过这样的问题,还是我使用了错误查询

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)