Consideraciones y buenas prácticas para eliminar datos
Empiezo esta clase dándote una recomendación muy importante: utiliza la eliminación de registros solo cuando sea necesario y cuando estés totalmente seguro de que no va a tener ningún tipo de consecuencia a nivel de datos a futuro.
Esta recomendación la hago porque es muy importante conservar el histórico de datos, pues esto termina siendo información valiosa que en algún momento vas a necesitar. Lo recomendable para cuando necesites "desaparecer" información de manera visual es usar un campo que indique si el registro está activo o no (como el que usamos en projects de is_active) y simplemente ponerlo en 0 o 1 dependiendo el estado en que se encuentre, pero no lo eliminamos permanentemente de nuestra base de datos.
Ahora, si necesitamos eliminar registros de manera permanente, usaremos, por supuesto, nuestro modelo y una sintaxis muy similar a las anteriores operaciones que hemos realizado.
Del modo simple, solo tendremos que encontrar el registro por su Id y luego indicarle que lo elimine de esta forma:
$project =Project::find(1);$project->delete();
Contamos realmente con varias formas de realizar esta acción, otra aún más simple es donde usamos el método destroy() (cuando tenemos la llave primaria de los registros que vamos a eliminar directamente) y lo podemos implementar de la siguiente manera:
Como ves, podemos eliminar desde un registro hasta un grupo de registros de los cuales tengamos su llave primaria, estos datos se pueden enviar separados por comas o como un array (en caso de que lo recibamos de otro lado con este formato) y simplemente llamando a destroy().
Pero, aún así, tenemos otra opción para eliminar registros basado en múltiples condiciones en caso de que no tengamos un id o que deseemos eliminar un grupo de registros específicos:
Project::where('is_active',0)->delete();
Esta sentencia utiliza nuevamente delete(), pero aquí la estamos implementando basados en una condición que sería a todos los proyectos que tengan el campo is_active en 0.
Como ves, a pesar de no ser la acción más recomendada, tenemos varias opciones para realizarlo de la manera más controlada posible.
Ahora hagamos una función que nos ayude a eliminar algunos registros de nuestra tabla projects, la llamaremos deleteProject y la agregaremos también a projectController.
Con esta función eliminaremos todos los proyectos cuyo project_id sea mayor a 15 y al final nos retornará un mensaje que diga "Registros eliminados". ¡Vamos a probarla!
Agregamos la ruta de esta función a nuestro archivo de rutas web.php:
Vamos al navegador y escribimos en la barra de direcciones:
http://localhost:8000/deleteProject
Nos debe mostrar el mensaje que pusimos en el return de la función: "Registros eliminados". Ya sabes que puedes verificar si se eliminaron los registros entrando a tu tabla a través de la consola de MySQL o consultando la función inicial que creamos que trae todos los registros de la tabla projects.
Reto 🏁
Ahora que sabes cómo eliminar registros de manera definitiva de tu base de datos, te reto a que crees tu propia función para eliminar los primeros 10 registros de la tabla projects.
Te invito a continuar con la próxima clase en la que aprenderás a optimizar las instrucciones y esto lo lograremos con Query Scopes. ➡