laravel - 如何在 Laravel4 中级联软删除?

标签 laravel laravel-4 eloquent cascading-deletes

尝试使用带有删除级联和软删除的外键,但运气不佳。

我有 2 个表:用户、事件。两个表都有软删除。

用户可以有 0..n 个事件。
事件有一个 user_id,用作用户的外键,如下所示:

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

问题是,当我删除用户时,它会被软删除,但其事件不会 - 无论是软删除还是物理删除。

我做错了什么,还是这是正确的 Eloquent 行为?

其次,如果这是正确的行为,那么如何最好地实现删除级联?也许像这样重写我的模型中的delete()方法...

public function delete()
{
  //delete all events...
  __parent::delete()
}

最佳答案

数据库的外键不会执行任何操作,因为您没有更改相关的主键。只有更新或删除主键才会修改相关行。

从我能找到的有关该主题的所有内容来看,解决方案是使用 Eloquent 的 Model Events监听删除事件,并更新相关表。

Here's one StackOverflow question about it.

或者,您可以“扩展”delete() 方法并直接包含该功能。 Here's an example.

关于laravel - 如何在 Laravel4 中级联软删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17977749/

相关文章:

php - 如何在 Laravel 查询中使用多个 OR、AND 条件

laravel - 如果 token 作为查询字符串出现在 URL 中,则阻止 Laravel API 处理 token

Laravel - 同时 LeftJoin 'on' 和 'orOn'

php - Laravel4 内存消耗问题

laravel - laravel 中的迁移是什么

laravel - 使用 Laravel,我如何创建一个更新一对多关系的 View ?

php - 在 Laravel 中创建多态字段名的规则是什么?

php - Laravel Controller 中每个方法的 Action 过滤器

php - SQLSTATE[HY000] [1045] 用户 'root' @'localhost' 的访问被拒绝(使用密码 : NO) . DB_HOST 设置为 localhost

php - Laravel 测试时创建数据库