У меня 2 миграции. Пользователи и сообщения и сообщения имеют onDelete: 'CASCADE'
. По какой-то причине, когда я удаляю пользователя с сообщениями, он выдает ошибку:
"Cannot delete or update a parent row: a foreign key constraint fails (
development_db .
posts , CONSTRAINT
posts_ibfk_1 FOREIGN KEY (
userId ) REFERENCES
users (
id ))",
но я уже установил для своей сущности сообщения значение onDelete: 'CASCADE'
. Меня сбивает с толку то, что когда я добавляю ON DELETE CASCADE
в миграцию своих сообщений, каскадное удаление работает, даже если я удалил onDelete: 'CASCADE'
в моей модели сообщений. Есть идеи? Так что же использовать onDelete
в typeorm, когда вы можете установить его для миграции, а не для сущности, но все еще работает.
Миграция пользователя:
/* eslint-disable class-methods-use-this */
import { MigrationInterface, QueryRunner } from 'typeorm';
export class UsersTable1575433829516 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`
CREATE TABLE users (
id INT AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
email VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
createdAt DATETIME NOT NULL,
PRIMARY KEY(id)
);
`);
}
public async down(queryRunner: QueryRunner): Promise<any> {
await queryRunner.dropTable('users', true);
}
}
Миграция POST:
/* eslint-disable class-methods-use-this */
import { MigrationInterface, QueryRunner } from 'typeorm';
export class PostsTable1581617587575 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`
CREATE TABLE posts (
id INT AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
body TEXT(65000) NOT NULL,
createdAt DATETIME NOT NULL,
updatedAt DATETIME,
PRIMARY KEY(id),
userId INT NOT NULL,
FOREIGN KEY (userId)
REFERENCES users (id)
);
`);
}
public async down(queryRunner: QueryRunner): Promise<any> {
await queryRunner.dropTable('posts', true);
}
}