Php Laravel模式删除集null
无法确定如何在Laravel中对表设置正确的onDelete约束。(我正在与SqLite合作) 我有3次迁移,创建库表:Php Laravel模式删除集null,php,laravel,laravel-migrations,Php,Laravel,Laravel Migrations,无法确定如何在Laravel中对表设置正确的onDelete约束。(我正在与SqLite合作) 我有3次迁移,创建库表: Schema::create('galleries', function($table) { $table->increments('id'); $table->string('name')->unique(); $table->text('path')->unique(); $table->text('de
Schema::create('galleries', function($table)
{
$table->increments('id');
$table->string('name')->unique();
$table->text('path')->unique();
$table->text('description')->nullable();
$table->timestamps();
$table->engine = 'InnoDB';
});
创建图片表:
Schema::create('pictures', function($table)
{
$table->increments('id');
$table->text('path');
$table->string('title')->nullable();
$table->text('description')->nullable();
$table->integer('gallery_id')->unsigned();
$table->foreign('gallery_id')
->references('id')->on('galleries')
->onDelete('cascade');
$table->timestamps();
$table->engine = 'InnoDB';
});
将库表链接到图片:
Schema::table('galleries', function($table)
{
// id of a picture that is used as cover for a gallery
$table->integer('picture_id')->after('description')
->unsigned()->nullable();
$table->foreign('picture_id')
->references('id')->on('pictures')
->onDelete('cascade || set null || null'); // neither of them works
});
我没有收到任何错误。此外,即使是“级联”选项也不起作用(仅在gallery表上)。删除图库将删除所有图片。但是删除封面图片不会删除图库(用于测试目的)
因为即使“级联”也没有被触发,所以我“设置null”不是问题所在
编辑(解决方法):
读完这篇文章后,我稍微改变了我的模式。现在,pictures表包含一个“is_cover”单元格,用于指示此图片是否为相册上的封面
对于原始问题的解决方案仍高度赞赏 根据
$table->onDelete('SETNULL')应该可以工作,请重试
$table->...->onDelete(DB::raw('set null'));
如果有任何错误,也会有帮助
在MySQL 5.5和InnoDB上使用Laravel 4.2,onDelete(“设置null”)可以工作。如果要在删除时设置null:
$table->...->onDelete('set null');
首先确保将外键字段设置为可空:
$table->integer('foreign_id')->unsigned()->nullable();
在laravel 8中,您可以使用:
在laravel 8中,您可以这样做
$table->foreignId('table_id')->nullable()->constrained()->onDelete('set null');
必须在constrated()之前调用null()列修饰符,并且onDelete('set null')SQLite不支持ALTER TABLE命令的ADD CONSTRAINT变量
您可能希望回滚,手动写出sql,然后在本地执行并运行测试。我所能找到的一切都表明应该有效,这可能是生成SQLThank的一个问题!不幸的是,它导致了同样的问题。我认为这是特定于SqLite和循环引用的内容。另外一个原因是onDelete('set null')与mysql一起工作。@SimonBengtsson该问题必须已被关闭或删除。另外对于
->nullable()
是否有相关的Laravel文档?它没有记录有哪些选项,但我认为您可以假设它是默认的mysql值(请参见。/vendor/laravel/framework/src/illighte/Database/Schema/Grammars/Grammar.php
)
$table->foreignId('forign_id')->nullable()->constrained("table_name")->cascadeOnUpdate()->nullOnDelete();
$table->foreignId('table_id')->nullable()->constrained()->onDelete('set null');