egg-mysql 如果数据表的主键名不是 id 该如何更新数据?
在 egg-mysql 的 npm 的说明文件里面没有明确的说明,找了一大圈的资料都没有发现,那只好去看源代码了。
在 https://github.com/ali-sdk/ali-rds/blob/master/lib/operator.js 文件 144 行就是更新的代码
proto.update = function* (table, row, options) {
options = options || {};
if (!options.columns) {
options.columns = Object.keys(row);
}
if (!options.where) {
if (!('id' in row)) {
throw new Error('Can not auto detect update condition, please set options.where, or make sure obj.id exists');
}
options.where = {
id: row.id,
};
}
const sets = [];
const values = [];
for (let i = 0; i < options.columns.length; i++) {
const column = options.columns[i]; sets.push('?? = ?');
values.push(column);
values.push(row[column]);
}
const sql = this.format('UPDATE ?? SET ', [ table ]) + this.format(sets.join(', '), values) + this._where(options.where);
debug('update(%j, %j, %j) \n=> %j', table, row, options, sql);
return yield this.query(sql);
};
我们一般使用就用到前两个参数,其实还有第三个参数,第 149 行,如果不存在 option.where,就补充一个,从这个代码我们可以想到这样编写代码,如果我的数据表的主键是 comment_ID,那么对应的更新代码:
/**
* @name update
* @description 更新评论
* @param {*} params 参数
* @function
* @return {Boolean} 是否操作成功
*/
async update(params) {
const val = await this.app.mysql.update('wp_comments', params, { where: { comment_ID: params.comment_ID } });
return val.affectedRows;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论