问答

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

作者:admin 2021-08-18 我要评论

这里我创建了两张表,一张是文章表,一张是文章类型表 文章表model // app/model/Article.tsimport { Application } from 'egg';export default function(app: A...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

这里我创建了两张表,一张是文章表,一张是文章类型表
文章表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

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 使用箭头函数return数据不能实现

    使用箭头函数return数据不能实现

  • 个人小程序号能接入小程序3D地图吗?

    个人小程序号能接入小程序3D地图吗?

  • vue 移动端项目中,使用了better-scrol

    vue 移动端项目中,使用了better-scrol

  • css如何做出区域平均划分为四列

    css如何做出区域平均划分为四列

腾讯云代理商
海外云服务器