2016-08-30 115 views
0

我有一个网站,用户可以在其中创建帖子和消息。 我希望这样,当用户删除他们的个人资料时,所有用户的帖子和消息也将被删除。我有一个用户,消息和帖子表。我正在考虑做一些像在Laravel 5中删除用户和用户创建的数据

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然后删除每一行?

+0

是的,它被称为DB [触发器](https://www.google.com/search?client=opera&q=DB+triggers&sourceid=opera&ie=UTF-8&oe=UTF-8 )或存储程序。 – MaxZoom

回答

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(); 
    }); 
} 

这当然要求您在模型中建立关系。

REF:https://laravel.com/docs/5.3/eloquent#events