Funcionamiento del borrado por lotes

(Datatable bulk delete)

Para poder añadir el borrado por lotes a una datatable debemos seguir los siguientes pasos:

  1. Añadir una columna a la datatable: tenemos que añadir una nueva columna donde colocaremos cada uno de los checkbox cuyo valor será el id del modelo para cada elemento. Para ello, se ha creado un componente simple de livewire para generar checkboxes que recibe unos pocos parámetros. Os dejo el código de ejemplo usado en el datatable de Multimedia. return view('utils::livewire.datatable-checkbox-delete')->with(['value' => $multimedia->id, 'name' => 'ids[]', 'className' => 'delete-checkbox']);
  2. Añadir el checkbox para la cabecera de la columna: en la función getColumns() de la datatable agregaremos el siguiente código dentro del return Column::make('bulkDelete')->title('') ->width("50px") ->orderable(false) ->searchable(false) ->className('text-center')
  3. Añadir el botón: a continuación, deberemos añadir el botón del borrado por lotes a nuestra datatable. Para incluirlo, añadiremos al return del builder en la función html() de la datatable la función parameters() indicando el botón a incluir de la siguiente forma. $this->builder()->parameters(['buttons' => [ [ 'text' =>' ' . 'Eliminar seleccionados', 'className' => 'bulk-delete-button bg-danger border-none d-none' ], ] ])
  4. Incluir el script: comprobando que el usuario tenga el permiso para poder utilizar el borrado por lotes, incluiremos el BLADE que contiene todos los scripts que controlan este comportamiento, usaremos la directiva @include de blade para añadir el script. @can('multimedia.bulkdelete') @include('utils::scripts.datatable-bulk-delete') @endcan
  5. Ruta: tendremos que añadir la ruta correspondiente en nuestro paquete. Dejo de ejemplo la que he utilizado en multimedia. Route::post('/multimedia/bulkdelete', [MultimediaController::class, 'bulkDelete'])->name('bulkdelete');
  6. Ruta por parámetro: a la hora de renderizar nuestra tabla desde el controlador, hay que pasarle la ruta como parámetro a la vista. return $multimediaDatatable->render('multimedia::index', ['bulkDeleteRoute' => route('multimedia.bulkdelete')]);
  7. Método "bulkDelete": ya solo faltaría indicar el comportamiento de nuestro método bulkDelete(Request $request) en nuestro controlador.
    Es importante no olvidar crear el permiso correspondiente para la acción bulkdelete.