Laravel Schema onDelete设置为null

 Yyao 发布于 2023-02-07 11:13

无法弄清楚如何在Laravel中的表上设置正确的onDelete约束.(我和SqLite合作)

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

我有3次迁移,创建了gallery表:

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
});

我没有收到任何错误.此外,即使"级联"选项也不起作用(仅在图库表上).删除图库会删除所有图片.但删除封面图片,不会删除图库(用于测试目的).

由于即使"级联"未被触发,我"设置空"也不是问题.

编辑(解决方法):

阅读完这篇文章之后,我改变了我的架构.现在,图片表包含一个"is_cover"单元格,用于指示此图片是否是其相册的封面.

原始问题的解决方案仍然受到高度赞赏!

3 个回答
  • 如果要在删除时设置null:

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

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

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

    2023-02-07 11:14 回答
  • 根据

    http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html

    $ table-> onDelete('set null')应该可以尝试

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

    如果有任何错误,也会有帮助

    2023-02-07 11:16 回答
  • 这是Laravel中的一个已知问题。关于这方面更多的信息在这里。

    SQLite不支持此功能,请参见此处

    另外一个话题是有这个问题的详细对决

    2023-02-07 11:17 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有