当前位置: 首页 > 面试题库 >

Laravel外键onDelete('cascade')不起作用

刘兴修
2023-03-14
问题内容

我与用户和角色之间有一个多对多的关系,并带有一个role_user表。我的迁移设置如下(简化):

users table:

public function up()
{
    Schema::create('users', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('email')->unique();
    });
}

roles table:

public function up()
{
    Schema::create('roles', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('name');
    });
}

role_user table:

public function up()
{
    Schema::create('role_user', function(Blueprint $table)
    {
        $table->increments('id');
        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        $table->integer('role_id')->unsigned();
        $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
    });
}

因此,根据文档,我将我的外键设置为unsigned。

现在,我添加了几个用户,并附加了一些角色-
一切正常。但是,当我删除一个用户(User::destroy(2))时,该用户在role_user表中的行不会被删除,这导致了多余的行。

我究竟做错了什么?

  • MySQL + InnoDB

编辑:抓取模型并应用->delete();也具有相同的效果。


问题答案:

尝试创建此表时尝试设置。此修复程序对我有用。

$table->engine = 'InnoDB';

我已经在以下位置提交了错误:https :
//github.com/laravel/framework/issues/8730



 类似资料:
  • 根据文档和本文,我只需要在@orm\joincolumn中指定ondelete=“cascade”,它应该生成一个在delete时级联的外键。是我干的.. 然而,当我进行迁移时,它生成的FK不会在删除时级联。 我也尝试删除部分,但没有效果。 编辑:我也试过在反面设置它,但它也不起作用(事实上,当我这样做时,根本就没有外键):

  • 我试图收集一些关于以下方法的信息,以便在删除父实体时自动删除子实体。似乎最常见的方法是使用这三个注释中的一个:或或。 我对第三个有点困惑:,因为在教义官方文件中关于这个问题的解释非常少),我希望有人能证实我从网上的研究和经验中收集和了解的以下信息... 它是做什么的? ==>当拥有方实体为。即使您与其他拥有方实体处于中。 应在集合上使用(因此在或关系中使用) ORM中的实现 ==>当拥有方实体是且

  • 我有单向相关实体: 以及以下测试: 如果不是从测试中调用此代码,则效果很好,但在测试中,我得到了一个例外,即建议没有被书籍删除。 此外,我尝试从为Hibernate查询记录的sql中获取任何信息,但我看不到此测试的任何语句。 我不想对实体使用双向链接,只想了解如何解决这个具体问题或以某种方式调试它。

  • 我正在使用用户密钥作为用户表中的主键 它总是显示这样的错误

  • 我有一个用户表,ID列作为主键。我有这个功能在控制器: 此函数不回显任何内容。如果我从$id更改为$name,如下所示: