2016-08-30 3 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(); 
    }); 
} 

Это, конечно, требует, чтобы у вас были отношения, установленные в ваших моделях.

исх: https://laravel.com/docs/5.3/eloquent#events

Смежные вопросы