这是我的表(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。在我的情况下,这不会发生。我总是在插入时获得0和Id为0.
我尝试过添加一个额外的列,自动增加主键ID(将CELL_ID删除为PK)。在这种情况下,我得到ID(自动增量值)。
我在这里缺少什么?
感谢。
答案 0 :(得分:5)
您必须将第二个参数传递给insert
方法,该方法指定要从中检索值的列。
在你的情况下它应该是这样的:
knex('CELLID').insert(insertObj, 'CELL_ID')
.then(function (result) {
// ...
})
答案 1 :(得分:1)
要返回刚刚插入的记录的ID,请使用以下语法。
addCarMake:function(model,callback){ 返回db.insert(model).into('car_make')。returning(“ make_id”)。then(function(id){
console.log("make_id===="+JSON.stringify(id));
id2:Number=id;
// callback(null,id);
return db('car_make')
.where('make_id',id[0]).first();
// return db.raw('select * from car_make where make_id=?',id)
})
但是返回的id是数组形式,因此请始终使用id [0]对其进行进一步的处理。
答案 2 :(得分:0)
MySQL doesn't support event
, so it's not available through Knex.
Here is a list of supported DB's from the Knex docs: http://knexjs.org/#Builder-returning
This is the only other method that I'm aware of to get the last inserted row: How to get the ID of INSERTed row in mysql?
答案 3 :(得分:0)
这是我用的
knex(tableName).insert(data).then(row => {return row[0]});
答案 4 :(得分:0)
您可能还需要在此处发布insertObj,因为您已经设法创建了一个STATUS列,该列禁止null和default null。
对于其他对returning()感到疑惑的人:问题是,特定的功能“ returning”未在MySQL中实现-这是knex抱怨如果使用 returning()的原因。但是,如果您编写回调,knex本身可以返回插入行的ID。
knex.insert({
name: 'Alice',
})
.into('person')
.then(function (id) {
console.log(id) // [1001]
});
答案 5 :(得分:0)
这就是我的用法,(提示:请确保处理插入失败)
return knex(TABLE.CAPTCHA).insert({
...captcha,
expire_time: createExpireTime()
}).then(ids => {
return ids.length ? ids[0] : false;
});