#typescript #postgresql #graphql #typeorm #typegraphql
#typescript #postgresql #graphql #typeorm #typegraphql
Вопрос:
У меня есть объект user, который предположительно содержит массив объектов json, но я не смог найти тип массива json для typeorm для хранения изначально, и я не уверен, как сохранить их в базе данных с помощью typeorm.
Текущая настройка работает с typegraphql, но меня смущает typeorm.
Моя пользовательская сущность примерно выглядит так:
User.ts
import { Entity, PrimaryGeneratedColumn, Column, BaseEntity, ManyToOne } from "typeorm";
import { Field, Int, ObjectType, ID } from "type-graphql";
**//THIS ENTITY**
@ObjectType()
export class Softwares {
@Field(() => Number)
id: number;
@Field()
category: string;
@Field(() => [String])
list: string[];
}
@ObjectType()
export class About {
@Field( { nullable: true } )
@Column("text", { nullable: true })
about_header_message: string;
**//THIS PART**
@Field(() => [Softwares], { nullable: true })
softwares: Softwares[];
@Field(() => [[String]], { nullable: true })
@Column("text", { nullable: true, array: true })
info: string[][];
}
@ObjectType()
@Entity()
export class User extends BaseEntity {
@Field(() => ID)
@PrimaryGeneratedColumn()
id: number;
@Field({ nullable: true })
@Column("text", { nullable: true })
title_name: string;
@Field({ nullable: true })
@Column("text", { nullable: true })
first_name: string;
@Field({ nullable: true })
@Column("text", { nullable: true })
last_name: string;
@Field((type) => About)
@Column(() => About)
about: About;
}
Обратите внимание, что класс About наследуется в обычную пользовательскую сущность. Я сделал это, потому что мой окончательный GraphQL в запросе get должен выглядеть примерно так :
{
title_name: "Sky Johnson",
first_name: "Sky",
last_name: "Johnson",
about: {
about_header_message: "A passionate developer, artist, and photographer",
info: [
["University", "University of Colorado Boulder - Cumulative GPA: 3.376"],
["Graduation", "May Class of 2020"],
["Degree", "Computer Science (BS) - Degree GPA: 3.514"],
["2nd Degree", "Creative Technology and Design (BS) - Degree GPA: 3.657"],
["Minor", "Applied Mathematics: Theoretical Statistics"],
["Languages", "English: Native", "日本語:~N4 University Experience"],
],
softwares: [
{
id: 1,
category: "Favorite Languages",
list: [
"C# Unity",
"Python",
"Java",
"Scala",
"Javascript/Typescript",
"C/C (limited)",
"Processing/Arduino",
"OpenSCAD",
],
},
{
id: 2,
category: "Python Libraries",
list: [
"Tensor Flow",
"MatPlotLib",
"NetworkX",
"Seaborn",
"SciKit",
"Keras",
],
},
],
},
};
Я попытался использовать отношение ManyToOne в typeorm в поле softwares в типе about, но я не смог заставить его работать, так как я думаю, что унаследованный характер класса about для User портит его (поскольку у одного пользователя может быть много объектов software, но список программного обеспечения находится в aboutсущность).
Если у кого-нибудь есть какие-либо идеи, которые бы очень помогли. Спасибо!
Комментарии:
1. Я думаю, что я понял это, разделив программный объект на новый объект и вызвав для него много к одному с помощью «@ManyToOne ((type) => User, (user) => user.about.softwares)`
Ответ №1:
TypeORM и Postgres поддерживают jsonb
field .
@Column('jsonb')
tasks: Foo[];