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


Но как вы уже поняли выход из этой ситуации есть, массовое удаление в Yii2 Gridview возможна и это даже проще, чем вы думали. Кое-кто потом за это вас будет благодарить. Первым делом в Gridview в массиве column вместо:
['class' => 'yiigridSerialColumn'] |
['class' => 'yiigridSerialColumn']
Напишем:
['class' => 'yiigridCheckboxColumn'] |
['class' => 'yiigridCheckboxColumn']
Тем самым вместо порядкового номера записи будут выводится чекбоксы. которые можно отметить все сразу. Разумеется те, что выведены на странице.

Теперь обернем весь 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();?> |
<?=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');
}
} |
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 мы закончим. Благодарю за внимание.
Если вы просто копируете код, то обратите внимание, что мой редактор кода ставит пробелы в коде там, где их быть не должно. Где именно, вы поймете сами. Их нужно удалить.
Добавить комментарий