尝试使用带有删除级联和软删除的外键,但运气不佳。
我有 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/