Php 为什么我在删除级联上的Laravel不起作用?

Php 为什么我在删除级联上的Laravel不起作用?,php,mysql,laravel,Php,Mysql,Laravel,为什么我的Laravel“级联删除”不起作用?你能帮我吗 Schema::create('payments', function (Blueprint $table) { $table->bigIncrements('id'); $table->bigInteger('account_id'); $table->decimal('amount', 13, 2); $table->timestamps(); }); Schema::crea

为什么我的Laravel“级联删除”不起作用?你能帮我吗

Schema::create('payments', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->bigInteger('account_id');
    $table->decimal('amount', 13, 2);
    $table->timestamps();
});

Schema::create('revenues', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->bigInteger('account_id');
    $table->decimal('amount', 13, 2);
    $table->timestamps();
});

Schema::create('transactions', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->bigInteger('user_id');
    $table->date('date');
    $table->decimal('amount', 13, 2);
    $table->unsignedBigInteger('payment_id');
    $table->unsignedBigInteger('revenue_id');
    $table->bigInteger('category_id');
    $table->bigInteger('subcategory_id');
    $table->string('remarks')->nullable();
    $table->timestamps();
    $table->foreign('payment_id')->references('id')->on('payments')->onDelete('cascade');
    $table->foreign('revenue_id')->references('id')->on('revenues')->onDelete('cascade');
});
我的引擎是InnoDB。10.4.8-MariaDB,Laravel 6.

写下:

$table->engine='InnoDB'

在创建表之后,单独声明外键约束也是一种很好的做法:

Schema::table('transactions', function (Blueprint $table) {
    $table->engine = 'InnoDB';  
    $table->foreign('payment_id')->references('id')->on('payments')->onDelete('cascade');
    $table->foreign('revenue_id')->references('id')->on('revenues')->onDelete('cascade');
});
这样说:

$table->engine='InnoDB'

在创建表之后,单独声明外键约束也是一种很好的做法:

Schema::table('transactions', function (Blueprint $table) {
    $table->engine = 'InnoDB';  
    $table->foreign('payment_id')->references('id')->on('payments')->onDelete('cascade');
    $table->foreign('revenue_id')->references('id')->on('revenues')->onDelete('cascade');
});

我认为我们需要查看交易表的其余部分。这张桌子上还有外键吗?发生了什么样的“不工作”?你有错误吗?它只是不删除吗?你看到MySQL中定义的层叠了吗?我正在删除交易记录,想使用层叠删除来删除付款记录。朋友,你误解了,删除层叠上的
意味着删除主表(付款/收入)中的任何行时,会删除从属表(交易)中的匹配行自动删除。这不是另一种方式;为此,您必须手动删除我认为我们需要查看事务表的其余部分。这张桌子上还有外键吗?发生了什么样的“不工作”?你有错误吗?它只是不删除吗?你看到MySQL中定义的层叠了吗?我正在删除交易记录,想使用层叠删除来删除付款记录。朋友,你误解了,删除层叠上的
意味着删除主表(付款/收入)中的任何行时,会删除从属表(交易)中的匹配行自动删除。这不是另一种方式;为此,您必须手动删除。谢谢您的建议。不过,我在控制器中添加了删除方法,以便可以删除与交易相关的付款和收入。谢谢您的建议。不过,我在控制器中添加了删除方法,以便可以删除与交易相关的付款和收入。