Всем привет. Этой статьей я открываю новый цикл записей, посвященный PHP фреймворку Yii2. И сейчас будем разбираться как можно быстро и массово удалять данные из Gridview Yii2. Изначально функция удаления отдельной записи уже реализована из коробки и с этим проблем нет. Но бывают ситуации, а в разработке вы будете с ними сталкиваться часто, что данные накапливаются очень быстро и их становится очень много. Порой они в дальнейшем никак не будут использоваться и подлежат удалению. А если их сотни, а то и тысячи, то удалять отдельно каждую запись вы просто устанете, а пользователи, которые будут это делать будут вас проклинать.
Но как вы уже поняли выход из этой ситуации есть, массовое удаление в Yii2 Gridview возможна и это даже проще, чем вы думали. Кое-кто потом за это вас будет благодарить. Первым делом в Gridview в массиве column вместо:
['class' => 'yii\grid\SerialColumn'] |
['class' => 'yii\grid\SerialColumn']
Напишем:
['class' => 'yii\grid\CheckboxColumn'] |
['class' => 'yii\grid\CheckboxColumn']
Тем самым вместо порядкового номера записи будут выводится чекбоксы. которые можно отметить все сразу. Разумеется те, что выведены на странице.
Теперь обернем весь 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 мы закончим. Благодарю за внимание.
Если вы просто копируете код, то обратите внимание, что мой редактор кода ставит пробелы в коде там, где их быть не должно. Где именно, вы поймете сами. Их нужно удалить.
Добавить комментарий