如何使用typeorm初始化传入对象的实体



我有一个实体"List",我想通过将对象传入构造函数来创建一个新列表。

列表.ts

import {Entity, PrimaryColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn } from "typeorm";
@Entity()
export class List {
@PrimaryColumn()
id: string;
@Column({type: "varchar", nullable: true})
dtype: string;
@Column({type: "varchar", nullable: true})
title: string;
@Column({type: "varchar"})
user_id: string;
@Column({type: "varchar", nullable: true})
brand_id: string;
@CreateDateColumn({type: "timestamp", nullable: true})
created_at: string;
@UpdateDateColumn({type: "timestamp", nullable: true})
updated_at: string;
@DeleteDateColumn({type: "timestamp", nullable: true})
deleted_at: string;
}

列表.测试

import "reflect-metadata";
import {createConnection, getRepository} from "typeorm";
import {List} from "./../../src/entity/lists/List";
describe("List", () => {
let connection
beforeAll( async () => {
connection = await createConnection();
console.log(connection);
});
it("should insert a list into database", async () => {
const listRepository = getRepository(List);
const list = new List({
id: "7e60c4ef",
dtype: "brandlist",
title: "OnePlus",
user_id: "3aecd1b0-c34d-4427-9abd-fdacef00eaa5",
brand_id: "7e60c4ef-0e6f-46c9-948b-a97d555bf4e4",
});
})
})

现在我得到以下内容

预期 0 个参数,但得到 1.ts(2554(

有没有办法打字器自动处理这个问题?

有两种方法可以解决这个问题,第一种方法是在 List 类中声明您自己的构造函数并分配值,但它变得混乱。

首选方法是使用repository.create从对象创建实体的实例。 https://github.com/typeorm/typeorm/blob/master/docs/repository-api.md

const listRepository = connection.getRepository(List);
const list = listRepository.create({
id: "7e60c4ef",
dtype: "brandlist",
title: "OnePlus",
user_id: "3aecd1b0-c34d-4427-9abd-fdacef00eaa5",
brand_id: "7e60c4ef-0e6f-46c9-948b-a97d555bf4e4",
});
const newList = await listRepository.save(list);

编辑:我确实通过尝试搜索如何通过传递属性/正文参数/对象来初始化 TypeORM 对象/类来到达这个线程。因此,如果您需要单个对象,则可以使用管理器。

import { getManager } from "typeorm";
// ...
const manager = getManager();
const newUser = manager.create(User, req.body);
const user = await manager.save(newUser);

创建用户对象并将其从显式请求动态正文中保存的示例。这个例子只是为了说明。在将架构传递给 create 函数之前对其进行验证和清理,以避免允许 API 用户传递任何参数(如{admin: true};)(。

import { getManager } from "typeorm";
createConnection()
.then(async (connection) => {
const app = express();
app.use(express.json());
app.post("/users", async (req: Request, res: Response) => {
const manager = getManager();
const newUser = manager.create(User, req.body);
const user = await manager.save(newUser);
res.json(user);
});
app.listen(4000);
})
.catch((error) => console.log(error));

我只想补充@Kay的答案。如果您通过从typeorm扩展BaseEntity类来使用活动记录模式,则可以直接在实体上调用创建方法,假设List是实体,例如

const newList = List.create({
id: "7e60c4ef",
dtype: "brandlist",
title: "OnePlus",
user_id: "3aecd1b0-c34d-4427-9abd-fdacef00eaa5",
brand_id: "7e60c4ef-0e6f-46c9-948b-a97d555bf4e4",
})

最新更新