【问题标题】:How to delete parent row when delete child row [closed]删除子行时如何删除父行[关闭]
【发布时间】:2018-02-12 08:42:02
【问题描述】:

假设我有 3 张桌子。

  1. 学生
  2. 大学
  3. 大学生

Students 表包含所有学生(所有大学生)数据。 College 表包含所有大学数据。而CollegeStudents 表由学生和学院的映射组成。我没有使用软删除。当我删除大学时,我可以使用关系轻松删除CollegeStudents 数据,因为CollegeStudentsCollege.(onDelete('cascade')) 的子级。但我的问题是,在删除 College 行时,我也想从 Students 表中删除学生。怎么可能。 mysql 中有什么方法可以管理这种标准吗?我正在使用 Laravel 雄辩。

提前感谢您的帮助。

【问题讨论】:

  • 很简单,你只需要在学生表中使用大学ID作为外国ID。因此,当您删除任何大学时,您对学生表使用相同的 id。
  • 你不能..因为你正在使用belongsToMany两种方式..这只是意味着..即使你删除了学院,该学院下的那些学生可能属于另一所学院..所以你不能删除它..如果你真的想要这样的东西,你必须修复大学和学生之间的关系..你可以使用 College hasMany students .. and Students belongsTo College ..

标签: php mysql laravel eloquent


【解决方案1】:

使用学生表中的大学 ID 作为外键。

【讨论】:

    【解决方案2】:

    除了@V-Wanderer 的答案之外,您还可以在迁移中指定如何处理外键关系。

    示例

    $table->foreign('user_id')
          ->references('id')->on('users')
          ->onDelete('cascade');
    

    将按预期删除关系

    reference_option: 限制 |级联 |设置为空 |没有行动 |设置默认值

    【讨论】:

      【解决方案3】:

      如果不想添加外键,可以在College模型中添加方法:

      protected static function boot(){
          parent::boot();
      
          static::deleted(function($college)
          {
              foreach($college->students as $student) {
                  $student->delete();
              }
          });
      }
      

      当然,您还需要在同一模型中定义students 方法(如下所示)。

      public function students()
      {
          return $this->hasMany('App\Student');
      }
      

      方法students 取决于您如何针对与大学有关系的学生...

      来源:LINK

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-09
        • 1970-01-01
        • 2018-03-12
        • 1970-01-01
        • 1970-01-01
        • 2021-12-20
        • 1970-01-01
        • 2021-09-27
        相关资源
        最近更新 更多