{"id":27065,"date":"2024-04-18T13:58:31","date_gmt":"2024-04-18T11:58:31","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=27065"},"modified":"2024-04-18T14:01:09","modified_gmt":"2024-04-18T12:01:09","slug":"desarrollo-rapido-de-crud-con-laravel","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/","title":{"rendered":"Desarrollo r\u00e1pido de CRUD con Laravel"},"content":{"rendered":"\n<p>Cuando trabajamos con aplicaciones empresariales, hay muchas tablas de la base de datos que requieren de un mantenimiento por parte del usuario. Crear las l\u00f3gicas de presentaci\u00f3n y l\u00f3gicas de negocio, suele ser una tarea tediosa y repetitiva. Para solucionar este problema, tenemos varios paquetes de Laravel que nos pueden ayudar con esta tarea. Porque a fin de cuentas, Laravel se encarga de realizar por nosotros tareas que no aportan valor a nuestra aplicaci\u00f3n y un mantenimiento de tabla es una de ellas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-que-es-un-crud\">\u00bfQu\u00e9 es un CRUD?<\/h2>\n\n\n\n<p>CRUD es el acr\u00f3nimo en ingl\u00e9s que utilizamos para el mantenimiento de tablas, con las operaciones de Creaci\u00f3n, Lectura, Modificaci\u00f3n y Borrado (Create, Read, Update y Delete). Es decir esos mantenimientos sencillos en los que lo \u00fanico que se hace es modificar la informaci\u00f3n de base de datos sin tener operaciones encadenadas. Solamente unas cuantas validaciones de formato y puede que de rango de valores.<\/p>\n\n\n\n<p>Hay m\u00faltiples herramientas que nos pueden ayudar en el dise\u00f1o de la l\u00f3gica de negocio y las pantallas necesarias para estas operaciones, pero nosotros vamos a utilizar un paquete de los muchos disponibles en los repositorios de <em>Composer<\/em>.<\/p>\n\n\n\n<p>Partimos de una aplicaci\u00f3n que tiene un frontal que se apoya en Bootstrap para el CSS de frontal y para localizar el mejor paquete de los disponibles en <em><a href=\"https:\/\/packagist.org\/?query=crud%20bootstrap&amp;tags=laravel\" class=\"ek-link\">Packagist<\/a><\/em>, realizamos una b\u00fasqueda de los dos t\u00e9rminos CRUD y Bootstrap con la etiqueta Laravel.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"390\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_001-1024x390.png\" alt=\"\" class=\"wp-image-27117\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_001-1024x390.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_001-300x114.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_001-768x292.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_001-1536x584.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_001.png 1885w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>De las opciones que nos presenta, nos vamos a quedar con una de las primeras (en mi b\u00fasqueda la segunda) que es CRUD Generator de Ibex. La documentaci\u00f3n en Packagist no es mucha, pero suficiente para ver que es compatible con nuestra versi\u00f3n 11 de Laravel y nos incluye un enlace a su repositorio de GitHub. Es aqu\u00ed donde tenemos toda la documentaci\u00f3n.<\/p>\n\n\n\n<p>Cuando utilices un paquete, f\u00edjate en la compatibilidad con las versiones m\u00e1s recientes de Laravel, lo ideal es que utilice tu misma versi\u00f3n mayor y que que tu c\u00f3digo utilice la \u00faltima. En caso de versiones anteriores, podr\u00eda ser compatible con tu c\u00f3digo, pero es importante que tu desarrollo est\u00e9 lo m\u00e1s actualizado posible para poder utilizar toda la potencia y seguridad de los paquetes m\u00e1s recientes. <\/p>\n\n\n\n<p><a href=\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/estas-listo-para-migrar-tus-aplicaciones-a-laravel-11\/\" target=\"_blank\" aria-label=\"Art\u00edculo recomendado: \u00bfEst\u00e1s listo para migrar tus aplicaciones a Laravel 11? (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">Art\u00edculo recomendado: \u00bfEst\u00e1s listo para migrar tus aplicaciones a Laravel 11?<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-instalando-el-paquete\">Instalando el paquete<\/h2>\n\n\n\n<p>Como en todos los casos que instalamos un paquete desde el repositorio, ejecutamos composer, pero en este caso, utilizamos un modificador:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">composer <span class=\"hljs-built_in\">require<\/span> ibex\/crud-generator --dev<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>El modificador o bandera dev nos sirve para indicar que se trata de un paquete que solamente es necesario para el desarrollo de nuestro proyecto. Si ya est\u00e1s acostumbrado a utilizar paquetes de test como <em>phpunit <\/em>o <em>pest<\/em><\/p>\n\n\n\n<p>Esto es importante para que cuando llevemos nuestro proyecto a producci\u00f3n no incluya paquetes innecesarios. Especialmente si est\u00e1n orientados a desarrollo, ya que podr\u00edan suponer una vulnerabilidad en la seguridad de Laravel.<\/p>\n\n\n\n<p>Aunque tras la instalaci\u00f3n del paquete ya tengamos creado el comando, no estar\u00e1 disponible hasta que no lo publiquemos con<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">php artisan vendor:publish --tag=crud<\/code><\/span><\/pre>\n\n\n<p>Si ahora ejecutamos el listado de comandos de <em>artisan<\/em>, visualizamos en la lista de comandos disponibles el nuevo<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">php<\/span> <span class=\"hljs-selector-tag\">artisan<\/span> <span class=\"hljs-selector-tag\">list<\/span>\n...\n<span class=\"hljs-selector-tag\">make<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:cast<\/span>                             <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">custom<\/span> <span class=\"hljs-selector-tag\">Eloquent<\/span> <span class=\"hljs-selector-tag\">cast<\/span> <span class=\"hljs-selector-tag\">class<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:channel<\/span>                          <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">channel<\/span> <span class=\"hljs-selector-tag\">class<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:command<\/span>                          <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">Artisan<\/span> <span class=\"hljs-selector-tag\">command<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:component<\/span>                        <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">view<\/span> <span class=\"hljs-selector-tag\">component<\/span> <span class=\"hljs-selector-tag\">class<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:controller<\/span>                       <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">controller<\/span> <span class=\"hljs-selector-tag\">class<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:crud<\/span>                             <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">bootstrap<\/span> <span class=\"hljs-selector-tag\">Laravel<\/span> <span class=\"hljs-selector-tag\">CRUD<\/span> <span class=\"hljs-selector-tag\">operations<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:event<\/span>                            <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">event<\/span> <span class=\"hljs-selector-tag\">class<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:exception<\/span>                        <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">custom<\/span> <span class=\"hljs-selector-tag\">exception<\/span> <span class=\"hljs-selector-tag\">class<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:factory<\/span>                          <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">model<\/span> <span class=\"hljs-selector-tag\">factory<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:job<\/span>                              <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">job<\/span> <span class=\"hljs-selector-tag\">class<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:listener<\/span>                         <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">event<\/span> <span class=\"hljs-selector-tag\">listener<\/span> <span class=\"hljs-selector-tag\">class<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:livewire<\/span>                         <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">Livewire<\/span> <span class=\"hljs-selector-tag\">component<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:mail<\/span>                             <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">email<\/span> <span class=\"hljs-selector-tag\">class<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:middleware<\/span>                       <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">middleware<\/span> <span class=\"hljs-selector-tag\">class<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:migration<\/span>                        <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">migration<\/span> <span class=\"hljs-selector-tag\">file<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:model<\/span>                            <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">Eloquent<\/span> <span class=\"hljs-selector-tag\">model<\/span> <span class=\"hljs-selector-tag\">class<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:notification<\/span>                     <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">notification<\/span> <span class=\"hljs-selector-tag\">class<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:observer<\/span>                         <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">observer<\/span> <span class=\"hljs-selector-tag\">class<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:policy<\/span>                           <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">policy<\/span> <span class=\"hljs-selector-tag\">class<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:provider<\/span>                         <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">service<\/span> <span class=\"hljs-selector-tag\">provider<\/span> <span class=\"hljs-selector-tag\">class<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:request<\/span>                          <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">form<\/span> <span class=\"hljs-selector-tag\">request<\/span> <span class=\"hljs-selector-tag\">class<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:resource<\/span>                         <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">resource<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:rule<\/span>                             <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">validation<\/span> <span class=\"hljs-selector-tag\">rule<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:scope<\/span>                            <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">scope<\/span> <span class=\"hljs-selector-tag\">class<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:seeder<\/span>                           <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">seeder<\/span> <span class=\"hljs-selector-tag\">class<\/span>\n  <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:test<\/span>                             <span class=\"hljs-selector-tag\">Create<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">test<\/span> <span class=\"hljs-selector-tag\">class<\/span>\n...<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-a-crear-cruds\">A crear cruds<\/h2>\n\n\n\n<p>Ahora que ya tenemos nuestro nuevo comando disponible vamos a ponerlo en pr\u00e1ctica creando un mantenimiento de una tabla.<\/p>\n\n\n\n<p>La ejecuci\u00f3n del comando es sencilla, solamente debemos indicar como par\u00e1metro el nombre de la tabla sobre la que queremos realizar el mantenimiento.<\/p>\n\n\n\n<p>Este es un paquete bastante purista, por lo que la tabla debe seguir los est\u00e1ndares de nomenclatura de Laravel y por lo tanto estar en plural.<\/p>\n\n\n\n<p>Yo he solicitado la creaci\u00f3n de un CRUD para una tabla y un modelo ya disponible en mi proyecto (y en todos), el de usuarios, por lo que me pide confirmaci\u00f3n de sobreescritura del modelo. Si fuera sobre una tabla que a\u00fan no tiene creado modelo, no nos har\u00eda esta pregunta. Le decimos que no y continuamos:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Creating Views ...\nPlease add route below:\nRoute::resource(<span class=\"hljs-string\">'users'<\/span>, <span class=\"hljs-attr\">UserController<\/span>::<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span>)<\/span>;\nCreated Successfully.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Y ya est\u00e1n creadas las vistas! <\/p>\n\n\n\n<p>Para poder acceder a las vistas reci\u00e9n creadas desde nuestra aplicaci\u00f3n, as\u00ed como la l\u00f3gica de control que llevan detr\u00e1s, nos pide que a\u00f1adamos una sola l\u00ednea a nuestro fichero de configuraci\u00f3n de rutas.<\/p>\n\n\n\n<p><em>Importante: no te olvides de a\u00f1adir la clase del nuevo controlador, porque en caso contrario, tendr\u00e1s un error al intentar visualizar las p\u00e1ginas m\u00e1s adelante.<\/em><\/p>\n\n\n\n<p>Por el camino nos ha ido creando fuentes en distintas ubicaciones del proyecto<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Modelo: En este ejemplo no lo crea, puesto que el modelo de Usuarios es b\u00e1sico en cualquier instalaci\u00f3n de Laravel, pero si no fuera as\u00ed nos incluir\u00eda un modelo con sus campos fillables<\/li>\n\n\n\n<li>Controlador: Nos genera un controlador completo con todas las operaciones necesarias para hacer un mantenimiento puro. Ten en cuenta que el borrado que realiza es f\u00edsico, por lo que puede que en tu caso sea necesario modificar este m\u00e9todo para transformarlo en un borrado l\u00f3gico.<\/li>\n\n\n\n<li>Vistas: Y lo pongo en plural porque no nos genera un fichero, sino una carpeta con las vistas necesarias. Si has utilizado una plantilla gen\u00e9rica para tu proyecto y has seguido la nomenclatura recomendada, estar\u00e1 listo para usar, porque las nuevas vistas extienden de layouts.app y usa los yield content y template_title, para completar su funcionalidad.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-diseno-las-vistas-creadas\">Dise\u00f1o las vistas creadas<\/h2>\n\n\n\n<p>Vamos a ver el c\u00f3digo que nos ha creado para la vista Index<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">@extends('layouts.app')\n\n@section('template_title')\n    User\n@endsection\n\n@section('content')\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"container-fluid\"<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"row\"<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"col-sm-12\"<\/span>&gt;<\/span>\n                <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"card\"<\/span>&gt;<\/span>\n                    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"card-header\"<\/span>&gt;<\/span>\n                        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"display: flex; justify-content: space-between; align-items: center;\"<\/span>&gt;<\/span>\n\n                            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">span<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"card_title\"<\/span>&gt;<\/span>\n                                {{ __('User') }}\n                            <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">span<\/span>&gt;<\/span>\n\n                             <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"float-right\"<\/span>&gt;<\/span>\n                                <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">a<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"{{ route('users.create') }}\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"btn btn-primary btn-sm float-right\"<\/span>  <span class=\"hljs-attr\">data-placement<\/span>=<span class=\"hljs-string\">\"left\"<\/span>&gt;<\/span>\n                                  {{ __('Create New') }}\n                                <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">a<\/span>&gt;<\/span>\n                              <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n                        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n                    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n                    @if ($message = Session::get('success'))\n                        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"alert alert-success m-4\"<\/span>&gt;<\/span>\n                            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span>&gt;<\/span>{{ $message }}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span>\n                        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n                    @endif\n\n                    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"card-body bg-white\"<\/span>&gt;<\/span>\n                        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"table-responsive\"<\/span>&gt;<\/span>\n                            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">table<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"table table-striped table-hover\"<\/span>&gt;<\/span>\n                                <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">thead<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"thead\"<\/span>&gt;<\/span>\n                                    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">tr<\/span>&gt;<\/span>\n                                        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">th<\/span>&gt;<\/span>No<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">th<\/span>&gt;<\/span>\n                                        \n                                        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">th<\/span>&gt;<\/span>Name<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">th<\/span>&gt;<\/span>\n                                        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">th<\/span>&gt;<\/span>Email<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">th<\/span>&gt;<\/span>\n                                        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">th<\/span>&gt;<\/span>Two Factor Secret<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">th<\/span>&gt;<\/span>\n                                        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">th<\/span>&gt;<\/span>Two Factor Recovery Codes<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">th<\/span>&gt;<\/span>\n                                        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">th<\/span>&gt;<\/span>Two Factor Confirmed At<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">th<\/span>&gt;<\/span>\n\n                                        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">th<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">th<\/span>&gt;<\/span>\n                                    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">tr<\/span>&gt;<\/span>\n                                <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">thead<\/span>&gt;<\/span>\n                                <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">tbody<\/span>&gt;<\/span>\n                                    @foreach ($users as $user)\n                                        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">tr<\/span>&gt;<\/span>\n                                            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">td<\/span>&gt;<\/span>{{ ++$i }}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">td<\/span>&gt;<\/span>\n                                            \n                                            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">td<\/span>&gt;<\/span>{{ $user-&gt;name }}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">td<\/span>&gt;<\/span>\n                                            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">td<\/span>&gt;<\/span>{{ $user-&gt;email }}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">td<\/span>&gt;<\/span>\n                                            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">td<\/span>&gt;<\/span>{{ $user-&gt;two_factor_secret }}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">td<\/span>&gt;<\/span>\n                                            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">td<\/span>&gt;<\/span>{{ $user-&gt;two_factor_recovery_codes }}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">td<\/span>&gt;<\/span>\n                                            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">td<\/span>&gt;<\/span>{{ $user-&gt;two_factor_confirmed_at }}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">td<\/span>&gt;<\/span>\n\n                                            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">td<\/span>&gt;<\/span>\n                                                <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">form<\/span> <span class=\"hljs-attr\">action<\/span>=<span class=\"hljs-string\">\"{{ route('users.destroy',$user-&gt;id) }}\"<\/span> <span class=\"hljs-attr\">method<\/span>=<span class=\"hljs-string\">\"POST\"<\/span>&gt;<\/span>\n                                                    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">a<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"btn btn-sm btn-primary \"<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"{{ route('users.show',$user-&gt;id) }}\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">i<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"fa fa-fw fa-eye\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">i<\/span>&gt;<\/span> {{ __('Show') }}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">a<\/span>&gt;<\/span>\n                                                    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">a<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"btn btn-sm btn-success\"<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"{{ route('users.edit',$user-&gt;id) }}\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">i<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"fa fa-fw fa-edit\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">i<\/span>&gt;<\/span> {{ __('Edit') }}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">a<\/span>&gt;<\/span>\n                                                    @csrf\n                                                    @method('DELETE')\n                                                    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">button<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"submit\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"btn btn-danger btn-sm\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">i<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"fa fa-fw fa-trash\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">i<\/span>&gt;<\/span> {{ __('Delete') }}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">button<\/span>&gt;<\/span>\n                                                <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">form<\/span>&gt;<\/span>\n                                            <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">td<\/span>&gt;<\/span>\n                                        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">tr<\/span>&gt;<\/span>\n                                    @endforeach\n                                <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">tbody<\/span>&gt;<\/span>\n                            <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">table<\/span>&gt;<\/span>\n                        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n                    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n                <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n                {!! $users-&gt;links() !!}\n            <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n@endsection\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Como podemos ver en la vista Index, nos ha creado todo el listado de campos y a la derecha nos a\u00f1ade botones para las dem\u00e1s operaciones del CRUD, de tal manera, que podemos visualizar, modificar o borrar. Adem\u00e1s, en la parte superior tenemos la opci\u00f3n de creaci\u00f3n de un elemento nuevo.<\/p>\n\n\n\n<p>\u00bfY la paginaci\u00f3n? Pues tambi\u00e9n est\u00e1 incluida. Si hemos utilizado Bootstrap en nuestro proyecto, tendr\u00e1 todos los estilos aplicados para una excelente experiencia de usuario.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-a-probar\">A probar!<\/h2>\n\n\n\n<p>Todav\u00eda no hemos terminado, nos falta la parte m\u00e1s importante, verificar que todo est\u00e1 en orden.<\/p>\n\n\n\n<p>Levantamos nuestro servidor de pruebas y accedemos a la ruta <a href=\"http:\/\/localhost:8000\/users\">http:\/\/localhost:8000\/users<\/a> para ver un listado de usuarios y aparecen los que hemos creado en nuestra aplicaci\u00f3n:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"188\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_002-1-1024x188.png\" alt=\"\" class=\"wp-image-27127\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_002-1-1024x188.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_002-1-300x55.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_002-1-768x141.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_002-1-1536x282.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_002-1.png 1650w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Los textos est\u00e1n en ingl\u00e9s. No es un problema demasiado importante, puesto que el c\u00f3digo viene listo para la internacionalizaci\u00f3n solamente tenemos que crear el fichero de recursos en la carpeta Lang para nuestro idioma y completar la lista de valores a traducir.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-me-faltan-campos\">Me faltan campos<\/h2>\n\n\n\n<p>Si realizas el alta o la modificaci\u00f3n de alg\u00fan registro, puedes echar en falta alguno de los campos.<\/p>\n\n\n\n<p>Este paquete, al igual que la mayor\u00eda, tiene una configuraci\u00f3n por defecto y no siempre es la que mejor se adapta a nuestras necesidades.<\/p>\n\n\n\n<p>Si te faltan campos como la contrase\u00f1a, fecha alta o modificaci\u00f3n, vete al fichero crud.php dentro de la carpeta config y busca la clave <em>unwantedColumns<\/em>.<\/p>\n\n\n\n<p>Bajo esta entrada, encontrar\u00e1s todos los campos que te faltan (y puede que alguno m\u00e1s). Elimina los que quieres que aparezcan y deja solamente los que quieras excluir.<\/p>\n\n\n\n<p>Como gran ventaja, tienes que cada vez que ejecutas el comando va a comprobar esta lista, por lo que puedes ir modific\u00e1ndolo conforme a tus necesidades<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">        <span class=\"hljs-comment\">\/*\n         * Do not make these columns $fillable in Model or views\n         *\/<\/span>\n        <span class=\"hljs-string\">'unwantedColumns'<\/span> =&gt; &#91;\n            <span class=\"hljs-string\">'id'<\/span>,\n            <span class=\"hljs-string\">'password'<\/span>,\n            <span class=\"hljs-string\">'email_verified_at'<\/span>,\n            <span class=\"hljs-string\">'remember_token'<\/span>,\n            <span class=\"hljs-string\">'created_at'<\/span>,\n            <span class=\"hljs-string\">'updated_at'<\/span>,\n            <span class=\"hljs-string\">'deleted_at'<\/span>,\n        ],\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Por \u00faltimo, si haces un guardado ver\u00e1s que te falta una clase importante, la Custom Request.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"519\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_003-1024x519.png\" alt=\"\" class=\"wp-image-27120\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_003-1024x519.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_003-300x152.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_003-768x389.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_003-1536x778.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_003.png 1768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Y es que este paquete nos crea la vista la presentaci\u00f3n de errores incluida, por lo que necesita tener una request personalizada que realice estas validaciones.<\/p>\n\n\n\n<p>Aunque podr\u00eda crearla vac\u00eda, debemos hacerlo nosotros y programarla conforme a nuestras necesidades.<\/p>\n\n\n\n<p>En mi caso, la creo con<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">php<\/span> <span class=\"hljs-selector-tag\">artisan<\/span> <span class=\"hljs-selector-tag\">make<\/span><span class=\"hljs-selector-pseudo\">:request<\/span> <span class=\"hljs-selector-tag\">UserRequest<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>y solamente cambio la funci\u00f3n authorize para autorizar las llamadas de cualquier usuario<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">\u00a0 \u00a0 <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">authorize<\/span><span class=\"hljs-params\">()<\/span>: <span class=\"hljs-title\">bool<\/span>\n\u00a0 \u00a0 <\/span>{\n\u00a0 \u00a0 \u00a0 \u00a0 <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">true<\/span>;\n\u00a0 \u00a0 }<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Por supuesto, puedes modificar esta clase para a\u00f1adir las validaciones que necesites en tus campos. Para no hacerlo demasiado complejo en este punto inicial, utilizamos simplemente la validaci\u00f3n de obligatoriedad sobre el nombre y el email. Para ello a\u00f1adimos en la funci\u00f3n rules, que nos crea vac\u00eda los valores del array asociativo con el nombre del campo y la validaci\u00f3n required:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">rules<\/span><span class=\"hljs-params\">()<\/span>: <span class=\"hljs-title\">array<\/span>\n    <\/span>{\n        <span class=\"hljs-keyword\">return<\/span> &#91;\n            <span class=\"hljs-string\">\"name\"<\/span> =&gt; <span class=\"hljs-string\">\"required\"<\/span>,\n            <span class=\"hljs-string\">\"email\"<\/span> =&gt;  <span class=\"hljs-string\">\"required\"<\/span>,\n      \n        ];\n    }\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Si enviamos un alta de usuario sin indicar ning\u00fan valor, ya nos muestra los mensajes de error. Quedar\u00eda internacionalizar nuestra aplicaci\u00f3n pero eso es algo que abordaremos de forma monogr\u00e1fica en otra ocasi\u00f3n:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"449\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_004-1-1024x449.png\" alt=\"\" class=\"wp-image-27121\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_004-1-1024x449.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_004-1-300x132.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_004-1-768x337.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_004-1-1536x674.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_004-1.png 1646w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusi\u00f3n<\/h2>\n\n\n\n<p>En muchos lenguajes de programaci\u00f3n y frameworks, nos tenemos que enfrentar a realizar este tipo de manipulaciones sencillas de datos, los temidos CRUD. Y no son temidos por su complejidad, sino porque son esas peque\u00f1as tareas que son necesarias, pero que apenas aportan valor y consumen mucho tiempo de desarrollo.<\/p>\n\n\n\n<p>Con la ayuda de los paquetes disponibles de forma p\u00fablica en Laravel, podemos crear este tipo de mantenimiento de forma sencilla y en apenas unos minutos. Dejando m\u00e1s tiempo para abordar las tareas complejas de nuestras aplicaciones.<\/p>\n\n\n\n<script src=\"https:\/\/codemotion.activehosted.com\/f\/embed.php?id=44\" type=\"text\/javascript\" charset=\"utf-8\"><\/script>\n","protected":false},"excerpt":{"rendered":"<p>En las aplicaciones empresariales hay muchas tablas de la base de datos que requieren de un mantenimiento sencillo por parte del usuario. Una tarea tediosa y repetitiva que podemos reducir a la m\u00ednima expresi\u00f3n con Laravel. Porque Laravel se encarga de realizar por nosotros tareas que no aportan valor a nuestra aplicaci\u00f3n y un mantenimiento de tabla es una de ellas.<\/p>\n","protected":false},"author":249,"featured_media":27128,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[10606,10648],"tags":[11880,11875],"collections":[11932,11860],"class_list":{"0":"post-27065","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-backend-es","8":"category-lenguajes-de-programacion","9":"tag-laravel-es","10":"tag-php-es","11":"collections-laravel","12":"collections-php","13":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Desarrollo r\u00e1pido de CRUD con Laravel - Codemotion Magazine<\/title>\n<meta name=\"description\" content=\"Descubre c\u00f3mo Laravel y Bootstrap agilizan el desarrollo en aplicaciones empresariales. Automatiza CRUD y optimiza tu flujo de trabajo.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Desarrollo r\u00e1pido de CRUD con Laravel\" \/>\n<meta property=\"og:description\" content=\"Descubre c\u00f3mo Laravel y Bootstrap agilizan el desarrollo en aplicaciones empresariales. Automatiza CRUD y optimiza tu flujo de trabajo.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-04-18T11:58:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-18T12:01:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"David Martinez\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"David Martinez\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/\"},\"author\":{\"name\":\"David Martinez\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/29b244cd009ab9146d634ceae52bdab2\"},\"headline\":\"Desarrollo r\u00e1pido de CRUD con Laravel\",\"datePublished\":\"2024-04-18T11:58:31+00:00\",\"dateModified\":\"2024-04-18T12:01:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/\"},\"wordCount\":1523,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1.jpeg\",\"keywords\":[\"Laravel\",\"PHP\"],\"articleSection\":[\"Backend\",\"Lenguajes de programaci\u00f3n\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/\",\"name\":\"Desarrollo r\u00e1pido de CRUD con Laravel - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1.jpeg\",\"datePublished\":\"2024-04-18T11:58:31+00:00\",\"dateModified\":\"2024-04-18T12:01:09+00:00\",\"description\":\"Descubre c\u00f3mo Laravel y Bootstrap agilizan el desarrollo en aplicaciones empresariales. Automatiza CRUD y optimiza tu flujo de trabajo.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1.jpeg\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1.jpeg\",\"width\":1024,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Lenguajes de programaci\u00f3n\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Desarrollo r\u00e1pido de CRUD con Laravel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/29b244cd009ab9146d634ceae52bdab2\",\"name\":\"David Martinez\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/lado_cuadrada-100x100.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/lado_cuadrada-100x100.png\",\"caption\":\"David Martinez\"},\"description\":\"Hi! I'm David. Sometimes a speaker, sometimes a listener, and always interested in web technologies. I specialize in complex projects involving anything related to PHP and Javascript. Lately, I've been diving deep into Laravel and API development (and the worst part is that I'm starting to like it).\",\"sameAs\":[\"https:\/\/martinezmartinez.com\",\"https:\/\/www.linkedin.com\/in\/dmartinezmartinez\/\"],\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/david-martinez\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Desarrollo r\u00e1pido de CRUD con Laravel - Codemotion Magazine","description":"Descubre c\u00f3mo Laravel y Bootstrap agilizan el desarrollo en aplicaciones empresariales. Automatiza CRUD y optimiza tu flujo de trabajo.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/","og_locale":"en_US","og_type":"article","og_title":"Desarrollo r\u00e1pido de CRUD con Laravel","og_description":"Descubre c\u00f3mo Laravel y Bootstrap agilizan el desarrollo en aplicaciones empresariales. Automatiza CRUD y optimiza tu flujo de trabajo.","og_url":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2024-04-18T11:58:31+00:00","article_modified_time":"2024-04-18T12:01:09+00:00","og_image":[{"width":1024,"height":1024,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1.jpeg","type":"image\/jpeg"}],"author":"David Martinez","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"David Martinez","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/"},"author":{"name":"David Martinez","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/29b244cd009ab9146d634ceae52bdab2"},"headline":"Desarrollo r\u00e1pido de CRUD con Laravel","datePublished":"2024-04-18T11:58:31+00:00","dateModified":"2024-04-18T12:01:09+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/"},"wordCount":1523,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1.jpeg","keywords":["Laravel","PHP"],"articleSection":["Backend","Lenguajes de programaci\u00f3n"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/","url":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/","name":"Desarrollo r\u00e1pido de CRUD con Laravel - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1.jpeg","datePublished":"2024-04-18T11:58:31+00:00","dateModified":"2024-04-18T12:01:09+00:00","description":"Descubre c\u00f3mo Laravel y Bootstrap agilizan el desarrollo en aplicaciones empresariales. Automatiza CRUD y optimiza tu flujo de trabajo.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1.jpeg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1.jpeg","width":1024,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/desarrollo-rapido-de-crud-con-laravel\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Lenguajes de programaci\u00f3n","item":"https:\/\/www.codemotion.com\/magazine\/es\/lenguajes-de-programacion\/"},{"@type":"ListItem","position":3,"name":"Desarrollo r\u00e1pido de CRUD con Laravel"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/29b244cd009ab9146d634ceae52bdab2","name":"David Martinez","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/lado_cuadrada-100x100.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/05\/lado_cuadrada-100x100.png","caption":"David Martinez"},"description":"Hi! I'm David. Sometimes a speaker, sometimes a listener, and always interested in web technologies. I specialize in complex projects involving anything related to PHP and Javascript. Lately, I've been diving deep into Laravel and API development (and the worst part is that I'm starting to like it).","sameAs":["https:\/\/martinezmartinez.com","https:\/\/www.linkedin.com\/in\/dmartinezmartinez\/"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/david-martinez\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1-600x400.jpeg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1-600x600.jpeg","author_info":{"display_name":"David Martinez","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/david-martinez\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1.jpeg",1024,1024,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1-150x150.jpeg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1-300x300.jpeg",300,300,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1-768x768.jpeg",768,768,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1.jpeg",1024,1024,false],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1.jpeg",1024,1024,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1.jpeg",1024,1024,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1-100x100.jpeg",100,100,true],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1-180x128.jpeg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1-896x504.jpeg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1-400x225.jpeg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1-600x400.jpeg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/04\/IMG_000-1-600x600.jpeg",600,600,true]},"uagb_author_info":{"display_name":"David Martinez","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/david-martinez\/"},"uagb_comment_info":0,"uagb_excerpt":"En las aplicaciones empresariales hay muchas tablas de la base de datos que requieren de un mantenimiento sencillo por parte del usuario. Una tarea tediosa y repetitiva que podemos reducir a la m\u00ednima expresi\u00f3n con Laravel. Porque Laravel se encarga de realizar por nosotros tareas que no aportan valor a nuestra aplicaci\u00f3n y un mantenimiento&hellip;","lang":"es","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/27065","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/249"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=27065"}],"version-history":[{"count":2,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/27065\/revisions"}],"predecessor-version":[{"id":27173,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/27065\/revisions\/27173"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/27128"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=27065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=27065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=27065"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=27065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}