【发布时间】:2020-12-02 12:43:21
【问题描述】:
目标
当我创建client 时,在telephones 表中创建。
发生了什么
我有 3 个表,分别称为 clients、contacts 和 telephones。根据这张图片,我们可以看到owner_id 可以是contacts.id 和/或clients.id。但是当我尝试创建client 时,client 已创建但未在telephones 表中插入数据。但是显示这个错误
{
"error": "insert or update on table \"telephones\" violates foreign key constraint \"TelephoneContact\""
}
迁移
import {
MigrationInterface,
QueryRunner,
TableColumn,
TableForeignKey,
} from 'typeorm';
export default class AddOwnerIdToTelephones1597250413640
implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.addColumn(
'telephones',
new TableColumn({
name: 'owner_id',
type: 'uuid',
isNullable: false,
}),
);
await queryRunner.createForeignKey(
'telephones',
new TableForeignKey({
name: 'TelephoneClient',
columnNames: ['owner_id'],
referencedColumnNames: ['id'],
referencedTableName: 'clients',
onDelete: 'CASCADE',
onUpdate: 'CASCADE',
}),
);
await queryRunner.createForeignKey(
'telephones',
new TableForeignKey({
name: 'TelephoneContact',
columnNames: ['owner_id'],
referencedColumnNames: ['id'],
referencedTableName: 'contacts',
onDelete: 'CASCADE',
onUpdate: 'CASCADE',
}),
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.dropForeignKey('telephones', 'TelephoneContact');
await queryRunner.dropForeignKey('telephones', 'TelephoneClient');
await queryRunner.dropColumn('telephones', 'owner_id');
}
}
电话型号
import {
PrimaryGeneratedColumn,
Column,
Entity,
ManyToOne,
JoinColumn,
} from 'typeorm';
import Client from './Client';
import Contact from './Contact';
@Entity('telephones')
class Telephone {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column()
telephone_number: string;
@ManyToOne(() => Client, client => client.id)
@ManyToOne(() => Contact, contact => contact.id)
@JoinColumn({ name: 'owner_id' })
owner_id: string;
}
export default Telephone;
【问题讨论】:
标签: typescript postgresql typeorm