Php Laravel迁移onDelete限制不工作

Php Laravel迁移onDelete限制不工作,php,mysql,laravel,Php,Mysql,Laravel,您好,我正在尝试在迁移中定义关系 我正在使用on delete restrict来防止在孩子在场时删除父记录。但它不起作用。例如,我有一个事件表(父表),它有版本(子表)。我正在使用editions表中的事件\u id 使用onDelete('restrict')并在我的版本表中具有事件id。。 它应该限制我从事件表中删除,因为长记录在版本表中有子记录,对吗?但它不是 下面是两个表的迁移 事件(父级) 我发现您的外键定义中缺少的一件事是在其上添加索引,这是外键的要求,这可能是您遇到问题的原因 试

您好,我正在尝试在迁移中定义关系 我正在使用on delete restrict来防止在孩子在场时删除父记录。但它不起作用。例如,我有一个事件表(父表),它有版本(子表)。我正在使用editions表中的事件\u id 使用
onDelete('restrict')
并在我的版本表中具有事件id。。 它应该限制我从事件表中删除,因为长记录在版本表中有子记录,对吗?但它不是

下面是两个表的迁移

事件(父级)


我发现您的外键定义中缺少的一件事是在其上添加索引,这是外键的要求,这可能是您遇到问题的原因

试着改变

$table->integer('event_id')->unsigned();

此外,您只需在列定义之后立即添加外键定义,无需将其放在不同的
Schema::table()
块中。

根据以下内容:

如果您使用的是SoftDeletes特性,则调用delete() 模型上的方法将仅更新模型中已删除的_at字段 数据库,并且不会触发onDelete约束 它是在数据库级别触发的,即当执行删除查询时 执行


因此,请确保您使用
DELETE
not
SoftDeletes
,否则您可以手动添加约束。

表引擎
InnoDB
?这个被接受的答案对您有用吗?您是否使用
SoftDeletes
特性?默认约束是一个约束,因此请务必使用默认值,我使用SoftDeletes,但不使用默认值这两个模态。我知道,但我也尝试过直接从数据库中删除(sequel pro)。。不影响,不起作用。我的代码正在添加约束。它甚至显示在数据库中。但它并不限制删除。。(我试过从phpmyadmin、sequel pro、application中删除)它无处不在。即使phpmyadmin说了ON DELETE restricts,您在执行上述删除操作时是否有机会禁用外键检查?尝试在服务器上运行此SQL命令
SET FOREIGN\u KEY\u CHECKS=1并尝试againI没有。但是我重新启动了MySQL服务器,它解决了这个问题。。所有约束现在都起作用了。谢谢
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateEditionsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('editions', function (Blueprint $table) {
            $table->increments('edition_id');
            $table->integer('event_id')->unsigned();
            $table->string('name');
            $table->dateTime('start')->nullable();
            $table->dateTime('end')->nullable();
            $table->enum('stage', ['Archived', 'Cancelled', 'Closed', 'Live', 'On-site', 'Pre-event', 'Sold out'])->nullable()->default('Pre-event');
            $table->tinyInteger('status');
            $table->integer('created_by');
            $table->integer('updated_by');
            $table->timestamps();

        });

        Schema::table('editions', function($table) {

            $table->foreign('event_id')
                ->references('event_id')->on('events')
                ->onDelete('restrict')->onUpdate('restrict');




        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('editions');
    }
}
$table->integer('event_id')->unsigned();
$table->integer('event_id')->unsigned()->index();