gpt4 book ai didi

node.js - TypeORM 插入带外键的行

转载 作者:行者123 更新时间:2023-12-05 04:45:45 25 4
gpt4 key购买 nike

我有一个@OneToMany关系
聊天室 <1 ---- M> 消息
我遇到的问题是,每当我尝试插入一条消息(或大量消息)时,ChatRoom 的外键为空。
此外,我正在上传我的设置。

@Entity("messages")
export class Message {

@PrimaryColumn()
id: string;

@ManyToOne(() => ChatRoom, chatroom => chatroom.messages)
chatRoom: ChatRoom | undefined

@Column({nullable: false})
message: string;

@Column({nullable: false})
receiver: string;

@Column({nullable: false})
created_utc: Date;
}
@Entity("chatrooms")
export class ChatRoom {

@PrimaryColumn()
id: string;

@OneToMany(() => Message, message => message.chatRoom, {
cascade: ["insert", "remove"]
})
@JoinColumn({name: 'id'})
messages: Message[];

@Column()
last_msg: string;

@Column()
last_msg_created_utc: Date;

@Column()
num_messages: number;

@Column()
num_replies: number;

@Column()
seen: boolean;

}

问题:

当尝试对多条消息创建批量插入时,我注意到查询没有为外键设置任何值,而是设置了 NULL

我要插入的消息 json:

{
id: '1',
message: 'text',
receiver: 'someone',
created_utc: 'utc date...',
chatRoomId: '123' -> chat room id exists
}

the query looks like this :
(this query is for single insert not bulk, but it goes the same for bulk)
INSERT INTO "messages"("id", "message", "receiver", "created_utc", "chatRoomId") VALUES ($1, $2, $3, $4, DEFAULT) -- PARAMETERS: [" bJU7","Zdravo test","kompir_zomba","2021-
09-05T09:53:54.693Z"]

这告诉我在插入行时甚至没有考虑 chatRoomId。该表如下所示 enter image description here

我用来插入消息的 Typeorm 插入查询

@InjectRepository(Message) private messageRepository: Repository<Message>
.....

this.messageRepository.save(message);

有人知道如何进行吗?

最佳答案

我在处理 NestJS 项目时遇到过类似的 TypeORM 问题。

原因:

出现此问题是因为您没有在消息实体(消息类)中定义任何chatRoomId 字段。因此,当 TypORM 将您的消息数据映射到 Message 实体时,它不会设置 chatRoomId

解决方案:

有两种解决方案可以解决此问题。

  1. 您可以在 Message 实体中添加 chatRoomId 字段,现在您可以在保存消息数据时发送该字段。

例如

@Column({type: "uuid"}) // <- Assuming that your primary key type is UUID (OR you can have "char")
chatRoomId: string;

Now, usually you would not need to create a migration for this sincethis field already exists in the database table.

  1. 另一种方法是在保存时将 ChatRoom 实体的实例传递给 message 对象。

您可以首先使用聊天室的 ID 找到聊天室,然后将其传递到消息对象中。

您的最终 message 对象应如下所示:

{
id: '1',
message: 'text',
receiver: 'someone',
created_utc: 'utc date...',
chatRoom: chatRoomData // <-- Assuming that chatRoomData contains the ChatRoom entity
}

关于node.js - TypeORM 插入带外键的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69062374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com