首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型多到多关系joinColumns

类型多到多关系joinColumns
EN

Stack Overflow用户
提问于 2020-03-18 16:04:48
回答 1查看 5.9K关注 0票数 2

我对打字机还不熟悉,我正努力使这个口碑成为一种魅力。我对简单的实体没有什么大不了的:照片和相册。我有一个连接表来知道哪张照片在哪张相册里。

因此,我有以下几点:

代码语言:javascript
复制
import {
  Entity, PrimaryGeneratedColumn, Column, OneToMany, JoinTable,
} from 'typeorm';
import { PicturesModel } from '../pictures/pictures.model';

@Entity({
  name: 'T_ALBUM_AL',
  synchronize: true,
})
export class AlbumModel {
  @PrimaryGeneratedColumn({
    name: 'AL_id',
  })
  id: number;

  @Column({
    name: 'AL_name',
  })
  name: string;

  @Column({
    name: 'AL_created_at',
  })
  created_at: Date;

  @Column({
    name: 'AL_updated_at',
  })
  updated_at: Date;

  @JoinTable({
    name: 'TJ_PICTURE_ALBUM_PA',
    joinColumn: {
      name: 'PI_id',
      referencedColumnName: 'PI_id',
    },
  })
  @OneToMany(() => PicturesModel, (pictures: PicturesModel) => pictures.id)
  pictures: PicturesModel[]
}


import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';

@Entity({
  name: 'T_PICTURE_PI',
  synchronize: true,
})
export class PicturesModel {
  @PrimaryGeneratedColumn({
    name: 'PI_id',
  })
  id: number;

  @Column({
    name: 'PI_name',
  })
  name: string;

  @Column({
    name: 'PI_path',
  })
  path: string;

  @Column({
    name: 'PI_created_at',
  })
  created_at: Date;

  @Column({
    name: 'PI_updated_at',
  })
  updated_at: Date;

  @Column({
    name: 'PI_size',
  })
  size: number;
}

因此,我有一个如下的模型:注意,用户逻辑尚未实现。

我有一个非常小的控制器来获取相册,我想检索每一张相册和里面的每一张照片:

代码语言:javascript
复制
import { Request, Response } from 'express';
import { getRepository } from 'typeorm';

import { AlbumModel } from './album.model';

class Album {
  public static async getAlbums(_req: Request, res: Response): Promise<Response> {
    try {
      const picture = await getRepository(AlbumModel).find({ relations: ['pictures'] });
      return res.json(picture);
    } catch (e) {
      console.error(e);
      return res.json('fail');
    }
  }
}

export default Album;

当我调用这个控制器时,我得到以下错误:但是正确地指定了joinColumns

代码语言:javascript
复制
TypeError: Cannot read property 'joinColumns' of undefined
    at /<something>/src/query-builder/SelectQueryBuilder.ts:1500:61
    at Array.map (<anonymous>)
    at SelectQueryBuilder.createJoinExpression (/<something>/src/query-builder/SelectQueryBuilder.ts:1470:57)
    at SelectQueryBuilder.getQuery (/<something>/src/query-builder/SelectQueryBuilder.ts:54:21)
    at SelectQueryBuilder.QueryBuilder.getQueryAndParameters (/<something>/src/query-builder/QueryBuilder.ts:415:28)
    at SelectQueryBuilder.<anonymous> (/<something>/src/query-builder/SelectQueryBuilder.ts:1956:40)
    at step (/<something>/node_modules/tslib/tslib.js:139:27)
    at Object.next (/<something>/node_modules/tslib/tslib.js:120:57)
    at /<something>/node_modules/tslib/tslib.js:113:75

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2020-03-18 20:08:27

我找到了答案,问题来自专辑实体。这个名字让我有点困惑。请注意以下部分:

代码语言:javascript
复制
    joinColumn: {
      name: 'PI_id',
      referencedColumnName: 'id',
   }

名称是数据库中的列名。

referencedColumnName是实体的“列”/ object属性

代码语言:javascript
复制
import {
  Entity, PrimaryGeneratedColumn, Column, JoinTable, ManyToMany,
} from 'typeorm';
import { PicturesModel } from '../pictures/pictures.model';

@Entity({
  name: 'T_ALBUM_AL',
  synchronize: true,
})
export class AlbumModel {
  @PrimaryGeneratedColumn({
    name: 'AL_id',
  })
  id: number;

  @Column({
    name: 'AL_name',
  })
  name: string;

  @Column({
    name: 'AL_created_at',
  })
  created_at: Date;

  @Column({
    name: 'AL_updated_at',
  })
  updated_at: Date;

  @ManyToMany(() => PicturesModel, (picture: PicturesModel) => picture.id)
  @JoinTable({
    name: 'TJ_PICTURE_ALBUM_PA',
    joinColumn: {
      name: 'PI_id',
      referencedColumnName: 'id',
    },
    inverseJoinColumn: {
      name: 'PI_id',
      referencedColumnName: 'id',
    },
  })
  pictures: PicturesModel[]
}

最后,这给了我想要的输出:

代码语言:javascript
复制
{
    "id":1,
   "name":"aa",
   "created_at":"2020-03-16T23:00:00.000Z",
   "updated_at":"2020-03-16T23:00:00.000Z",
   "pictures":[
      {
         "id":1,
         "name":"Pic 1",
         "path":"Path",
         "created_at":"2020-03-17T23:00:00.000Z",
         "updated_at":"2020-03-17T23:00:00.000Z",
         "size":"2"
      }
   ]
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60743283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档