【问题标题】:Laravel Eloquant Delete Child Table Row - onDelete('cascade') is not deleting child table rowLaravel Eloquent Delete Child Table Row - 在 Delete('cascade') 上没有删除子表行
【发布时间】:2020-12-19 10:58:53
【问题描述】:

提前谢谢你

我有 2 个如下表

1) users
2) reviews

我创建的架构如下所示

    Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('first_name',100)->nullable();
            $table->timestamps();
    });
   Schema::create('reviews', function (Blueprint $table) {
            $table->id();
            $table->bigInteger('user_id')->unsigned();
            $table->string('name',100)->nullable();
            $table->timestamps();
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    });
  • 当我删除用户时,它不是删除属于已删除用户的评论

  • 我正在像下面这样删除用户

    用户::where('id',1)->delete();

    是否有任何简短、简单和完美的方法来为所有雄辩的模型做这些?

【问题讨论】:

    标签: mysql laravel eloquent foreign-keys


    【解决方案1】:

    您可以在父模型中尝试此代码:

    public static function boot()
      {
        parent::boot();
    
        static::deleting(function ($model) {
          $model->relations()->delete();
        });
      }
    

    *softDeletes 更新

    public static function boot()
    {
      parent::boot();
    
      static::deleting(function ($model) {
      if($model->isForceDeleting()){
          $model->relations()->delete();//or forceDelete if child also using softDelete
        });
      }
    }
    

    【讨论】:

    • Alzafan Christian,感谢您的帮助我检查了您的代码,但似乎无法正常工作我使用了 laravel 的软删除,所以也必须这样做吗?
    • 是的,我会编辑我的答案很难输入回复评论抱歉
    • 即使使用 $model->relations()->forceDelete() 也无法正常工作 我的父母和孩子都使用 softdelete
    • 我过去使用过该代码,并且它运行良好。如果你想强制删除父使用 Model::query()->ForceDelete();你能检查你的数据库吗,因为它可能已经被删除了,所以在父级中你需要使用 $model->relations()->withTrashed() 获取 softDeleted 子级
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    相关资源
    最近更新 更多