【问题标题】:How to initialize an entity passing in an object using typeorm如何使用 typeorm 初始化传入对象的实体
【发布时间】:2020-09-19 15:29:11
【问题描述】:

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

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;

}

list.test

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)

typeorm 有没有办法自动处理这个问题?

【问题讨论】:

    标签: node.js typescript typeorm


    【解决方案1】:

    有两种方法可以解决这个问题,第一种是在 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);
    

    【讨论】:

    【解决方案2】:

    编辑:我确实通过尝试搜索如何通过传递属性/主体参数/对象来初始化 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));
    

    【讨论】:

      猜你喜欢
      • 2013-06-27
      • 1970-01-01
      • 2014-06-17
      • 2021-09-11
      • 2014-05-18
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      相关资源
      最近更新 更多