这是我的表(CELLID)结构。
+---------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+------------+------+-----+---------+-------+
| CELL_ID | int(11) | NO | PRI | NULL | |
| STATUS | tinyint(4) | NO | | NULL | |
+---------+------------+------+-----+---------+-------+
这是我要插入到表中的代码。
knex('CELLID').insert(insertObj)
.then(function (result) {
_log.info(reqContainer.uuid, "Successfully Added To CELLID||", result)
// respond back to request
_log.info(reqContainer.uuid, "Exiting CELLID_S");
return resolve(result) // respond back to request
})
.catch(function (err) {
_log.error(reqContainer.uuid, "Failed Adding To CELLID ||", err)
_log.error(reqContainer.uuid, "Exiting CELLID_S");
// respond back to request
return reject(Error("Failed Adding CELLID"));
})
成功插入后,必须返回Id。在我的情况下不会发生这种情况。我总是在插入时得到ID为0的值。
我试过添加一个额外的列,自动递增主键ID(删除CELL_ID作为PK)。在这种情况下,我得到了ID(自动递增值)。
我错过了什么?
谢谢
7条答案
按热度按时间e4yzc0pl1#
必须将第二个参数传递给
insert
方法,该方法指定从中检索值的列。在您的情况下,它应该看起来像这样:
iaqfqrcu2#
MySQL不支持
returning
,因此不能通过Knex使用。以下是Knex文档中支持的DB列表:http://knexjs.org/#Builder-returning
这是我所知道的获取最后插入行的唯一其他方法:How to get the ID of INSERTed row in mysql?
hjzp0vay3#
要返回刚刚插入的记录的id,请使用以下语法。
但是返回的id是数组形式的,所以总是使用id[0]来进一步处理它。
f3temu5u4#
这是我用的
qmelpv7a5#
您可能也需要在这里发布insertObj,因为您已经设法创建了一个禁止null和default null的列STATUS。
对于那些想返回()的人:问题是,MySQL中没有实现特定的“返回”功能-这就是为什么如果你使用returning(),knex会抱怨的原因。但是如果您编写回调函数,knex本身可以返回插入行的ID。
1bqhqjot6#
这就是我使用它的方式(tips:确保处理插入失败)
cnjp1d6j7#
与这里的其他答案没有什么不同,但显示了一个稍微简单和异步的方法: