删除行时如何删除其他表中的所有关联行? LARAVEL 5.4

时间:2017-03-23 14:39:32

标签: laravel

我写了这个函数,但想知道是否有" laravel"如何做同样的功能?

我想删除其他表格中与我删除的行相关的所有行。

    $id = 6;

    $query = "SELECT TABLE_NAME, COLUMN_NAME 
              FROM INFORMATION_SCHEMA.COLUMNS 
              WHERE COLUMN_NAME = 'exercise_id'";

    $tables = DB::select($query);

    foreach ($tables as $table) :

        $rows = DB::table($table->TABLE_NAME)
               ->select($table->COLUMN_NAME)
               ->where($table->COLUMN_NAME, '=', $id)
               ->delete();

    endforeach;

2 个答案:

答案 0 :(得分:3)

添加foreign key constraints并使用->onDelete('cascade')

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

在这种情况下,其他表格中的所有相关数据都将自动删除。

答案 1 :(得分:2)

这通常通过在修改架构时对外键进行级联删除来完成。

参见https://laravel.com/docs/5.4/migrations#foreign-key-constraints 在那里,文档声明:

  

您也可以为“on delete”和“on”指定所需的操作   更新“约束的属性:

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

PS:这种方法并不一定局限于laravel(laravel方式)