В проекте «Ответы на мои вопросы» администратор имеет функцию просмотра всех вопросов и удаления каждого из них, если он пожелает. но один идентификатор вопроса имеет 5 связанных таблиц. то есть каждый идентификатор вопроса присутствует в 5 таблицах в дБ, и когда администратор удаляет один вопрос, я должен удалить все записи из этих 5 таблиц на основе этого идентификатора вопроса.
в моем контроллере
DB::table('user_questions')->where('question_id','=',$question_id)->delete();
DB::table('masters_answers')->where('question_id','=',$question_id)->delete();
DB::table('masters_questions')->where('question_id','=',$question_id)->delete();
DB::table('question_to_category')->where('question_id','=',$question_id)->delete();
DB::table('question_to_tags')->where('question_id','=',$question_id)->delete();
return Redirect::action('AdminController@anyShowQuestions', array());
Приведенный выше код будет работать, но есть ли способ сделать ту же процедуру в одном запросе БД в laravel. я сослался на это сообщение но не могу найти решение для моего. это будет так полезно, если кто-нибудь предложит правильный путь?
Вы можете правильно установить свои внешние ключи на этих связанных таблицах. добавлять onDelete('cascade')
когда вы создаете ключи в процессе миграции и если все в порядке, то, когда вы удаляете вопрос, он автоматически удаляет и связанные элементы.
ИЛИ ЖЕ
Использовать DB::statement
выражение с соответствующим запросом SQL.
Пример:
DB::statement('update foo set bar=2');
Вам нужно будет решить вашу задачу в простом SQL, а затем поместить полученный запрос в DB::statement
и альт.
Чтобы помочь вам с запросом, вы можете прочитать это статья или это StackOverflow сообщение
Установка внешних ключей на ваших таблицах будет самым чистым решением
В качестве альтернативы, если вы не можете использовать внешние ключи, вы можете использовать Модельные события.
Каждая из ваших моделей запускает несколько событий, что позволяет вам подключаться к различным точкам жизненного цикла модели, включая delete
событие. Используйте что-то вроде этого в вашей модели:
class User extends Eloquent {
public static function boot()
{
//execute the parent's boot method
parent::boot();
//delete your related models here, for example
static::deleted(function($user)
{
foreach($user->user_profiles as $profile)
{
$profile->delete();
}
}
}
}
Теперь каждый раз User
удаляется, все прикреплено User_Profile
Мы также будем удалены.