无法理解如何在Laravel中对表设置正确的onDelete约束.(我正在与SqLite合作)

$table->...->onDelete('cascade'); // works
$table->...->onDelete('null || set null'); // neither of them work

我有3个迁移,正在创建图片库表格:

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 桌子上).删除图片库将删除所有图片.但是删除封面图片并不会删除图库(出于测试目的).

因为连"级联"都没有触发,所以我"设为空"不是问题.

EDIT (workaround):

在读完这article篇文章后,我稍微改变了一下我的模式.现在,Pictures表包含一个"is_cover"单元格,表示此图片是否为其相册的封面.

我们仍然高度赞赏解决原来问题的方法!

推荐答案

如果要在删除时设置NULL,请执行以下操作:

$table->...->onDelete('set null');

首先确保将外键字段设置为可空:

$table->integer('foreign_id')->unsigned()->nullable();

Php相关问答推荐

在不刷新页面的情况下无法使用JQuery更新id

无法使用PHP DomDocument找到IMG元素

在WooCommerce中处理客户总支出中的退款

如果再次调用SESSION_START(),会话.gc-max是否会重新启动?或者它是从第一次创建会话开始计算的?

如何使用ms graph php sdk v2列出具有已知路径的DriveItem的子项

WooCommerce:在 checkout 审核单和发票中显示定制产品数据

Laravel:如何展平多维Eager 加载的集合

莫德克斯.当我try 使用pThumb为手机压缩图像时,没有任何react

WooCommerce中基于用户角色的不同产品差价

带Redhat php curl的http_code 0

未收到Strava WebHook事件数据

如何批量处理消息总线中的消息

为什么从一个页面到另一个页面都找不到 JQuery,因为它们使用相同的 twig 模板?

在php中计算两个没有假期的日期之间的小时差

添加产品标签以通过 WooCommerce 邮箱通知订购商品

为WooCommerce中的运输方式ID设置必填的 checkout 订单备注字段

symfony/notifier + twig/inky-extra 在 dunglas/symfony-docker 中缺少 ext-xsl.

在WooCommerce中显示 checkout 的高级自定义字段(Advanced Custom Fields)并保存其值

PDO 和 SQL 查询结果中日期格式不同的原因可能是什么?

PHP/Laravel 中的自定义时区