Php Laravel迁移onDelete限制不工作
您好,我正在尝试在迁移中定义关系 我正在使用on delete restrict来防止在孩子在场时删除父记录。但它不起作用。例如,我有一个事件表(父表),它有版本(子表)。我正在使用editions表中的事件\u id 使用Php Laravel迁移onDelete限制不工作,php,mysql,laravel,Php,Mysql,Laravel,您好,我正在尝试在迁移中定义关系 我正在使用on delete restrict来防止在孩子在场时删除父记录。但它不起作用。例如,我有一个事件表(父表),它有版本(子表)。我正在使用editions表中的事件\u id 使用onDelete('restrict')并在我的版本表中具有事件id。。 它应该限制我从事件表中删除,因为长记录在版本表中有子记录,对吗?但它不是 下面是两个表的迁移 事件(父级) 我发现您的外键定义中缺少的一件事是在其上添加索引,这是外键的要求,这可能是您遇到问题的原因 试
onDelete('restrict')
并在我的版本表中具有事件id。。
它应该限制我从事件表中删除,因为长记录在版本表中有子记录,对吗?但它不是
下面是两个表的迁移
事件(父级)
我发现您的外键定义中缺少的一件事是在其上添加索引,这是外键的要求,这可能是您遇到问题的原因
试着改变
$table->integer('event_id')->unsigned();
到
此外,您只需在列定义之后立即添加外键定义,无需将其放在不同的Schema::table()
块中。根据以下内容:
如果您使用的是SoftDeletes特性,则调用delete()
模型上的方法将仅更新模型中已删除的_at字段
数据库,并且不会触发onDelete约束
它是在数据库级别触发的,即当执行删除查询时
执行
因此,请确保您使用DELETE
notSoftDeletes
,否则您可以手动添加约束。表引擎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();