Массовое удаление записей из Gridview Yii2 по отмеченным чекбоксам

    Комментариев нет 553

Всем привет. Этой статьей я открываю новый цикл записей, посвященный PHP фреймворку Yii2. И сейчас будем разбираться как можно быстро и массово удалять данные из Gridview Yii2. Изначально функция удаления отдельной записи уже реализована из коробки и с этим проблем нет. Но бывают ситуации, а в разработке вы будете с ними сталкиваться часто, что данные накапливаются очень быстро и их становится очень много. Порой они в дальнейшем никак не будут использоваться и подлежат удалению. А если их сотни, а то и тысячи, то удалять отдельно каждую запись вы просто устанете, а пользователи, которые будут это делать будут вас проклинать.

gridview-yii2

Телеграм-канал serblog.ru

Но как вы уже поняли выход из этой ситуации есть, массовое удаление в Yii2 Gridview возможна и это даже проще, чем вы думали. Кое-кто потом за это вас будет благодарить. Первым делом в Gridview в массиве column вместо:

['class' => 'yii\grid\SerialColumn']

Напишем:

['class' => 'yii\grid\CheckboxColumn']

Тем самым вместо порядкового номера записи будут выводится чекбоксы. которые можно отметить все сразу. Разумеется те, что выведены на странице.

checkbox-gridview-yii2

Теперь обернем весь Gridview в форму и создадим кнопку удаления.

1
2
3
4
5
6
7
8
< ?=Html::beginForm(['controller/checkbox-delete'],'post');?>
< ?=Html::submitButton('Удалить выбранные', ['class' => 'btn btn-danger mt-3 mb-3','data-confirm' => Yii::t('yii', 'Вы уверены, что хотите удалить данные записи? Восстановить их будет нельзя.'),]);?>
 
< ?= GridView::widget([
// Код виджета
 
]); ?>
< ?= Html::endForm();?>

Теперь, чтобы у нас все заработало и мы могли массово удалить все, что нам не нужно, напишем в контроллере action с названием actionCheckboxDelete. Название можете придумать какой заходите, главное, чтобы вы сами понимали что н делает.

1
2
3
4
5
6
7
8
9
10
11
12
13
public function actionCheckboxDelete(){
    $selection = \Yii::$app->request->post('selection');
    if ($selection != null){
        Deals::deleteAll([
            'id' => $selection
        ]);
        \Yii::$app->session->setFlash('success', 'Выбранные данные удалены!');
        return$this->redirect('delete-deals');
    }else{
        \Yii::$app->session->setFlash('error', 'Нечего удалять!');
        return$this->redirect('delete-deals');
    }
}

Тут, мы получаем массив с ID выбранных записей. Если он не пустой, то удаляем то, что выбрали и выводим уведомление. В противном случае выводим сообщение, что удалять нечего, потому как ничего не выбрано или записей больше нет. На этом с массовым удалением записей в Yii2 мы закончим. Благодарю за внимание.

Если вы просто копируете код, то обратите внимание, что мой редактор кода ставит пробелы в коде там, где их быть не должно. Где именно, вы поймете сами. Их нужно удалить.

Любая сумма на развитие сайта

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *