egg-mysql 如果数据表的主键名不是 id 该如何更新数据?

发布于 2022-01-08 23:52:53 字数 1445 浏览 1107 评论 0

在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文