egg-sequelize+typescript一对一关联查询错误

这里我创建了两张表,一张是文章表,一张是文章类型表
文章表model

// app/model/Article.ts
import { Application } from 'egg';

export default function(app: Application) {
  const { INTEGER, STRING } = app.Sequelize;
  const Article = app.model.define('article', {
    id: {
      type: INTEGER,
      primaryKey: true,
      autoIncrement: true,
    },
    title: STRING(255),
    case_id: INTEGER,
  }, {
    timestamps: false, // 去除createAt updateAt
    freezeTableName: true, // 使用自定义表名
  });

  return class extends Article {
    static associate() {
      app.model.Article.belongsTo(app.model.Case, { foreignKey: 'case_id', targetKey: 'id' });
    }
  };
}

文章类型表model

import { Application } from 'egg';

export default function(app: Application) {
  const { INTEGER, STRING } = app.Sequelize;
  const Case = app.model.define('case', {
    id: {
      type: INTEGER,
      primaryKey: true,
      autoIncrement: true,
    },
    value: STRING(255),
  }, {
    timestamps: false, // 去除createAt updateAt
    freezeTableName: true, // 使用自定义表名
  });

  return class extends Case {};
}

我在文章类型表中写试过这样写的

return class extends Case {
    static associate() {
      app.model.Case.hasMany(app.model.Article, { as: 'articles' });
    }
  };

虽然我感觉不用加这个 hasMany,因为我这个只是一对一,在文章表中我已经使用 belongsTo 进行关联了,只是官方demo是这样写的,但是还是会报错,报错信息如下:
image.png
里面的sql语句是这个

SELECT ``.`id`, ``.`title`, ``.`case_id`, `case`.`id` AS `case.id` FROM `article` AS `` LEFT OUTER JOIN `case` AS `case` ON ``.`case_id` = `case`.`id`;

我试了下

SELECT
    `article`.`id`,
    `article`.`title`,
    `article`.`case_id`,
    `case`.`id` AS `case.id` 
FROM
    `article` AS `article`
    LEFT OUTER JOIN `case` AS `case` ON ``.`case_id` = `case`.`id`;

要这么写才会出现结果,有大佬知道在belongsTo中该怎么写才能给表重命名呢,不是给关联的表case重命名,这个用 as 就可以重命名了,是给 article 重命名

看错误信息是两个表都有 id 字段,当连接的时候会出现列重复,这种在mysql里面很好解决,直接指定显示哪个表的id就好,但是在代码里面有点懵逼,希望有大佬能帮帮我

数据库表

case表
image.png
article表
image.png

阅读 2.6k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题