Eliminar registros en Laravel

Hasta ahora hemos visto como crear registros y editarlos, pero hoy vamos a aprender a eliminar registros en laravel.

Para ello como de costumbre tenemos que seguir unos pasos sencillos:

Creamos la ruta

Como de costumbre vamos a nuestro archivos de rutas; routes/wep.php e incluimos la nueva ruta.

Route::post('mensaje/{slug?}/delete', 'MensajesController@destroy');

Como hemos ido viendo hasta ahora lo que hacemos es que cuando Laravel necesite acceder a borrar un elemento llama a la acción destroy de nuestro controlador de mensajes.

Creamos la acción

Ahora nos vamos a MesnajesController.php y modificamos la acción destroy por el siguiente código:

public function destroy($slug)
{
    $mensaje = Mensaje::whereSlug($slug)->firstOrFail();
    $mensaje->delete();
    return redirect('mensajes')->with('status', 'El mensaje ' . $slug . ' Ha sido eliminado');

}

Aquí utilizamos el slug para determinar que mensaje se tiene que seleccionar y con firstOrFail() se toma aquel que tenga dicho slug.

Se utiliza el método delete para eliminar el elemento.

Finalmente se redirecciona al usuario a la vista mensajes y mostramos un mensaje donde informamos que se ha realizado la acción.

Añadir el mensaje en estado en mensajes

Nos vamos a resources/views/mensajes/index.blade.php y añadimos el condicional if debajo del div del encabezado.

<div class="panel-heading">
	<h2>Mensajes</h2>
</div>
@if (session('status'))
	<div class="alert alert-success">
		{{ session('status') }}
	</div>
@endif

Añadir formulario para eliminado en el botón

Finalmente tenemos que cambiar en show.blade.php de nuestra aplicación el enlace de eliminar y sustituirlo por el siguiente formulario.

<form method="post" action="{!! action('MensajesController@destroy', $mensaje->slug) !!}" class="pull-left">
	{!! csrf_field() !!}
	<div>
		<button type="submit" class="btn btn-warning">Borrar</button>
	</div>				
</form>

En este formulario se le dice que elemento tiene que eliminar, y funciona igual que el resto de los formularios en Laravel, pasando el csrf_token y todo

¿Por que se utiliza un formulario para eliminar un dato?

Esta pregunta me la hice yo también la primera vez, pero cuando lo piensas tiene sentido. La acción destroy solo permite enviar datos por post por seguridad, imagina que pasamos por url el slug de los mensajes a borrar, sería una vulnerabilidad del sistema.

La única forma de enviar datos por post es utilizar formularios, de modo que nos obliga a hacerlo así, pero como los formularios se generan de forma automática no nos debe de preocupar demasiado.