删除子行时如何删除父行

时间:2018-02-12 08:42:03

标签: php mysql laravel eloquent

假设我有3张桌子。

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

    感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

示例

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

将按预期删除关系

  

reference_option:       限制| CASCADE | SET NULL |没有动作| SET DEFAULT

enter image description here

答案 2 :(得分:0)

如果您不想添加外键,可以在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