2016-08-30 118 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