在Laravel 5中删除用户和用户创建的数据

时间:2016-08-30 18:39:45

标签: php laravel-5 eloquent

我有一个网站,用户可以在其中创建帖子和消息。 我想要它,以便当用户删除他们的个人资料时,所有用户的帖子和消息也将被删除。我有一个用户,消息和帖子表。我在考虑做一些像

这样的事情
User::destroy(Auth->user()->id); //to delete user
Message::where(user_id, Auth->user())->delete(); //to delete al messages from that user
Post::where(user_id, Auth->user())->delete(); //to delete all posts from that user

这是最好的方式,还是有更优雅的选择?我是否需要基本上搜索所有表格中的user_id然后删除每一行?

1 个答案:

答案 0 :(得分:2)

为此,在迁移过程中,您需要使用onDelete方法设置外键约束。

这将存在于你的帖子表中。

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

这将存在于您的留言表中。

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

检查外键约束。 https://laravel.com/docs/5.3/migrations#foreign-key-constraints

如果由于某种原因无法修改迁移,则另一个选项是执行触发器。

protected static function boot() {
    parent::boot();

    static::deleting(function($user) { 
         $user->posts()->delete();
         $user->messages()->delete();
    });
}

这当然要求您在模型中设置关系。

参考:https://laravel.com/docs/5.3/eloquent#events