{"id":69149,"date":"2023-08-17T11:05:47","date_gmt":"2023-08-17T09:05:47","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=69149&#038;preview=true&#038;preview_id=69149"},"modified":"2023-08-22T07:13:16","modified_gmt":"2023-08-22T05:13:16","slug":"laravel-crud","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/","title":{"rendered":"C\u00f3mo hacer CRUD (Create, Read, Update, and Delete. Crear, Leer, Actualizar y Eliminar) con Laravel"},"content":{"rendered":"<p><a href=\"https:\/\/laravel.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel<\/a> es un popular <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-laravel\/\">framework PHP<\/a> para crear aplicaciones web modernas y din\u00e1micas en el panorama actual de desarrollo web, que evoluciona r\u00e1pidamente. Una de sus caracter\u00edsticas principales es <a href=\"https:\/\/laravel.com\/docs\/10.x\/eloquent\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel Eloquent<\/a>, un <a href=\"https:\/\/en.wikipedia.org\/wiki\/Object%E2%80%93relational_mapping\" target=\"_blank\" rel=\"noopener noreferrer\">mapeador objeto-relacional<\/a> (ORM, Object\u2013relational mapping) que permite a los desarrolladores realizar eficazmente operaciones de creaci\u00f3n, lectura, actualizaci\u00f3n y eliminaci\u00f3n (CRUD, create, read, update, and delete) en una base de datos.<\/p>\n<p>Este tutorial muestra c\u00f3mo realizar estas operaciones en tu aplicaci\u00f3n Laravel utilizando el ORM Eloquent de Laravel y c\u00f3mo desplegar tu aplicaci\u00f3n Laravel CRUD utilizando <a href=\"https:\/\/kinsta.com\/es\/mykinsta\/\">MyKinsta<\/a>.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Funcionalidad CRUD en Laravel<\/h2>\n<p>Las operaciones CRUD son la columna vertebral de cualquier aplicaci\u00f3n basada en bases de datos. Te permiten realizar las operaciones de base de datos m\u00e1s b\u00e1sicas y esenciales, como crear nuevos registros, leer los existentes, actualizarlos y eliminarlos. Estas operaciones son cruciales para la funcionalidad de cualquier <a href=\"https:\/\/docs.sevalla.com\/templates\/overview#laravel\">aplicaci\u00f3n Laravel<\/a> que interact\u00fae con una base de datos.<\/p>\n<p>Eloquent proporciona una forma sencilla e intuitiva de interactuar con la base de datos, disminuyendo las complejidades de la gesti\u00f3n de bases de datos para que puedas centrarte en construir tu aplicaci\u00f3n. Sus m\u00e9todos y clases incorporados te permiten hacer CRUD f\u00e1cilmente en los registros en la base de datos.<\/p>\n<h3>Requisitos Previos<\/h3>\n<p>Para seguir este tutorial, aseg\u00farate de que tienes lo siguiente:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.apachefriends.org\/download.html\" target=\"_blank\" rel=\"noopener noreferrer\">XAMPP<\/a><\/li>\n<li><a href=\"https:\/\/getcomposer.org\/download\/\" target=\"_blank\" rel=\"noopener noreferrer\">Composer<\/a><\/li>\n<li><a href=\"https:\/\/my.kinsta.com\/login\/?lang=es\">Una cuenta en MyKinsta<\/a><\/li>\n<li>Una cuenta en <a href=\"https:\/\/github.com\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub<\/a>, <a href=\"https:\/\/gitlab.com\" target=\"_blank\" rel=\"noopener noreferrer\">GitLab<\/a> o <a href=\"https:\/\/bitbucket.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bitbucket<\/a> para enviar tu c\u00f3digo<\/li>\n<li><a href=\"https:\/\/getbootstrap.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bootstrap versi\u00f3n 5<\/a><\/li>\n<\/ul>\n<h3>Pasos<\/h3>\n<ol start=\"1\">\n<li>Instala Laravel y crea una nueva aplicaci\u00f3n<\/li>\n<li>Crea una base de datos<\/li>\n<li>Crea una tabla<\/li>\n<li>Crea un controlador<\/li>\n<li>Configura el modelo<\/li>\n<li>A\u00f1ade una ruta<\/li>\n<li>Generar archivos Blade<\/li>\n<li>Despliega y prueba tu aplicaci\u00f3n CRUD<\/li>\n<\/ol>\n<p>Para guiarte por el camino, consulta el <a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-laravel-crud\" target=\"_blank\" rel=\"noopener noreferrer\">c\u00f3digo completo<\/a> del tutorial.<\/p>\n<h2>Instalar Laravel y Crear una Nueva Aplicaci\u00f3n<\/h2>\n<p>Abre tu terminal donde quieras crear tu aplicaci\u00f3n Laravel y sigue los pasos que se indican a continuaci\u00f3n.<\/p>\n<ol start=\"1\">\n<li>Para instalar Laravel, ejecuta<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">composer global require laravel\/installer<\/code><\/pre>\n<ol start=\"2\">\n<li>Para crear una nueva aplicaci\u00f3n Laravel, ejecuta:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">laravel new crudposts<\/code><\/pre>\n<h2>Crear una Base de Datos<\/h2>\n<p>Para crear una nueva base de datos para tu aplicaci\u00f3n<\/p>\n<ol start=\"1\">\n<li>Inicia los servidores Apache y MySQL en el panel de control de XAMPP y visita <code>http:\/\/localhost\/phpmyadmin<\/code> en tu navegador.<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>Haz clic en <strong>Nueva<\/strong> en la barra lateral izquierda. Deber\u00edas ver lo siguiente:<\/li>\n<\/ol>\n<figure style=\"width: 1134px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/phpmyadmin-form-create-db.png\" alt=\"El formulario de creaci\u00f3n de base de datos.\" width=\"1134\" height=\"315\"><figcaption class=\"wp-caption-text\">El formulario de creaci\u00f3n de base de datos.<\/figcaption><\/figure>\n<ol start=\"3\">\n<li>A\u00f1ade un nombre de base de datos y haz clic en <strong>Crear<\/strong>.<\/li>\n<\/ol>\n<ol start=\"4\">\n<li>Edita el archivo <strong>.env<\/strong> de tu aplicaci\u00f3n en el root de tu aplicaci\u00f3n Laravel. Contiene todas las variables de entorno utilizadas por la aplicaci\u00f3n. Localiza las variables prefijadas con <code>DB_<\/code> y ed\u00edtalas con las credenciales de tu base de datos:<\/li>\n<\/ol>\n<pre><code class=\"language-env\">DB_CONNECTION=\nDB_HOST=\nDB_PORT=\nDB_DATABASE=\nDB_USERNAME=\nDB_PASSWORD=<\/code><\/pre>\n<h2>Crear una Tabla<\/h2>\n<p>Las filas de datos de tu aplicaci\u00f3n se almacenan en tablas. S\u00f3lo necesitas una tabla para esta aplicaci\u00f3n, creada utilizando las <a href=\"https:\/\/laravel.com\/docs\/10.x\/migrations\" target=\"_blank\" rel=\"noopener noreferrer\">migraciones de Laravel<\/a>.<\/p>\n<ol start=\"1\">\n<li>Para crear una tabla y generar un archivo de migraci\u00f3n utilizando la interfaz de l\u00ednea de comandos de Laravel, Artisan, ejecuta:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan make:migration create_posts_table<\/code><\/pre>\n<p>El comando anterior crea un nuevo archivo,<\/p>\n<p><strong>yyyy_mm_dd_hhmmss_create_posts_table.php<\/strong>, en <strong>base de datos\/migraciones<\/strong>.<\/p>\n<ol start=\"2\">\n<li>Abre <strong>yyyy_mm_dd_hhmmss_create_posts_table.php<\/strong> para definir las columnas que quieres dentro de tu tabla de base de datos en la funci\u00f3n up:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">public function up()\n{\n  Schema::create('posts', function (Blueprint $table) {\n    $table-&gt;id();\n    $table-&gt;string('title');\n    $table-&gt;text('body');\n    $table-&gt;timestamps();\n  });\n}<\/code><\/pre>\n<p>Este c\u00f3digo define lo que contiene la tabla posts. Tiene cuatro columnas: <code>id<\/code>, <code>title<\/code>, <code>body<\/code>, y <code>timestamps<\/code>.<\/p>\n<ol start=\"3\">\n<li>Ejecuta los archivos de migraciones de la carpeta <strong>database\/migrations<\/strong> para crear tablas en la base de datos:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan migrate<\/code><\/pre>\n<p>El resultado es el siguiente<\/p>\n<figure style=\"width: 614px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-crud-run-migrations.png\" alt=\"Ejecutando las migraciones.\" width=\"614\" height=\"403\"><figcaption class=\"wp-caption-text\">Ejecutando las migraciones.<\/figcaption><\/figure>\n<ol start=\"4\">\n<li>Ve a la base de datos que creaste antes para confirmar que has creado las tablas:<\/li>\n<\/ol>\n<figure style=\"width: 1053px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-crud-posts-table.png\" alt=\"Tablas creadas.\" width=\"1053\" height=\"209\"><figcaption class=\"wp-caption-text\">Tablas creadas.<\/figcaption><\/figure>\n<h2>Crear un Controlador<\/h2>\n<p>El controlador contiene todas las funciones para hacer CRUD a las entradas desde la base de datos.<\/p>\n<p>Genera un archivo controlador dentro de tu aplicaci\u00f3n Laravel utilizando Artisan:<\/p>\n<pre><code class=\"language-sh\">php artisan make:controller PostController --api<\/code><\/pre>\n<p>Ejecutando este comando se crea un archivo<strong> PostController.php<\/strong> en <strong>app\/Http\/Controllers<\/strong>, con c\u00f3digo boilerplate y declaraciones de funciones vac\u00edas <code>index<\/code>, <code>store<\/code>, <code>show<\/code>, <code>update<\/code>, y <code>destroy<\/code>.<\/p>\n<h2>Crear Funciones<\/h2>\n<p>A continuaci\u00f3n, crea las funciones que almacenan, indexan, actualizan, destruyen, crean, muestran y editan los datos.<\/p>\n<p>Puedes a\u00f1adirlas al archivo <strong><a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-laravel-crud\/blob\/main\/app\/Http\/Controllers\/PostController.php\" target=\"_blank\" rel=\"noopener noreferrer\">app\/Http\/Controller\/PostController.php<\/a><\/strong> que se muestra a continuaci\u00f3n.<\/p>\n<h3>La Funci\u00f3n <code>store<\/code><\/h3>\n<p>La funci\u00f3n <code>store<\/code> a\u00f1ade una entrada a la base de datos.<\/p>\n<p>Despl\u00e1zate hasta la funci\u00f3n <code>store<\/code> y a\u00f1ade el siguiente c\u00f3digo dentro de las llaves vac\u00edas:<\/p>\n<pre><code class=\"language-php\">$request-&gt;validate([\n  'title' =&gt; 'required|max:255',\n  'body' =&gt; 'required',\n]);\nPost::create($request-&gt;all());\nreturn redirect()-&gt;route('posts.index')\n  -&gt;with('success','Post created successfully.');<\/code><\/pre>\n<p>Este c\u00f3digo toma un objeto que contiene el t\u00edtulo y el cuerpo de la entrada, valida los datos, a\u00f1ade una nueva entrada a la base de datos si los datos son v\u00e1lidos y redirige al usuario a la p\u00e1gina de inicio con un mensaje de \u00e9xito.<\/p>\n<h3>La Funci\u00f3n <code>index<\/code><\/h3>\n<p>La funci\u00f3n <code>index<\/code> recupera todas las entradas de la base de datos y env\u00eda los datos a la p\u00e1gina <strong><a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-laravel-crud\/blob\/main\/resources\/views\/posts\/index.blade.php\" target=\"_blank\" rel=\"noopener noreferrer\">posts.index<\/a><\/strong>.<\/p>\n<h3>La Funci\u00f3n <code>update<\/code><\/h3>\n<p>La funci\u00f3n &lt;<code>update<\/code> contiene el <code>id<\/code> del post a actualizar, el nuevo post <code>title<\/code>, y el <code>body<\/code>. Tras validar los datos, busca el post con el mismo <code>id<\/code>. Si la encuentra, la funci\u00f3n <code>update<\/code> actualiza el post en la base de datos con los nuevos <code>title<\/code> y <code>body<\/code>. A continuaci\u00f3n, redirige al usuario a la p\u00e1gina de inicio con un mensaje de \u00e9xito.<\/p>\n<h3>La Funci\u00f3n <code>destroy<\/code><\/h3>\n<p>La funci\u00f3n <code>destroy<\/code> encuentra una entrada con el <code>id<\/code> dado y la borra de la base de datos, luego redirige al usuario a la p\u00e1gina de inicio con un mensaje de \u00e9xito.<\/p>\n<p>Las funciones anteriores son las que se utilizan para hacer CRUD a las entradas de la base de datos. Sin embargo, debes definir m\u00e1s funciones dentro del controlador para mostrar las p\u00e1ginas necesarias en <strong>resources\/views\/posts\/<\/strong>.<\/p>\n<h3>La Funci\u00f3n <code>create<\/code><\/h3>\n<p>La funci\u00f3n <code>create<\/code> renderiza la p\u00e1gina <strong><a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-laravel-crud\/blob\/main\/resources\/views\/posts\/create.blade.php\" target=\"_blank\" rel=\"noopener noreferrer\">resources\/views\/posts\/crear.hoja.php<\/a><\/strong> que contiene el formulario para a\u00f1adir entradas a la base de datos.<\/p>\n<h3>La Funci\u00f3n <code>show<\/code><\/h3>\n<p>La funci\u00f3n <code>show<\/code> encuentra una entrada con el nombre <code>id<\/code> en la base de datos y muestra la p\u00e1gina <strong><a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-laravel-crud\/blob\/main\/resources\/views\/posts\/show.blade.php\" target=\"_blank\" rel=\"noopener noreferrer\">resources\/views\/posts\/mostrar.blade.php<\/a><\/strong> con la entrada.<\/p>\n<h3>La Funci\u00f3n <code>edit<\/code><\/h3>\n<p>La funci\u00f3n <code>edit<\/code> busca una entrada con el nombre <code>id<\/code> en la base de datos y muestra el archivo <strong><a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-laravel-crud\/blob\/main\/resources\/views\/posts\/edit.blade.php\" target=\"_blank\" rel=\"noopener noreferrer\">resources\/views\/posts\/edit.blade.php<\/a><\/strong> con los detalles de la entrada dentro de un formulario.<\/p>\n<h2>Configurar el Modelo<\/h2>\n<p>El modelo <code>Post<\/code> interact\u00faa con la tabla <strong>posts<\/strong> de la base de datos.<\/p>\n<ol start=\"1\">\n<li>Para crear un modelo con Artisan, ejecuta<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan make:model Post<\/code><\/pre>\n<p>Este c\u00f3digo crea un archivo <strong>Post. php<\/strong> dentro de la carpeta <strong>App\/Models<\/strong>.<\/p>\n<ol start=\"2\">\n<li>Crea un array <code>&lt;fillable<\/code>. A\u00f1ade el siguiente c\u00f3digo dentro de la clase <code>Post<\/code> y debajo de la l\u00ednea <code>use HasFactory;<\/code><\/li>\n<\/ol>\n<pre><code class=\"language-php\">protected $fillable = [\n  'title',\n  'body',\n];<\/code><\/pre>\n<p>Este c\u00f3digo crea un array <code>fillable<\/code> que te permite a\u00f1adir elementos a la base de datos desde tu aplicaci\u00f3n Laravel.<\/p>\n<ol start=\"3\">\n<li>Conecta el modelo <code>Post<\/code> al archivo <strong>PostController.php<\/strong>. Abre <strong>PostController.php<\/strong> y a\u00f1ade la siguiente l\u00ednea en <code>use IlluminateHttpRequest;<\/code>. Tiene el siguiente aspecto<\/li>\n<\/ol>\n<pre><code class=\"language-php\">use IlluminateHttpRequest;\nuse AppModelsPost;<\/code><\/pre>\n<p>El archivo <strong>PostController.php<\/strong> ahora deber\u00eda tener este aspecto:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace AppHttpControllers;\nuse IlluminateHttpRequest;\nuse AppModelsPost;\nclass PostController extends Controller\n{\n  \/**\n   * Display a listing of the resource.\n   *\n   * @return IlluminateHttpResponse\n   *\/\n  public function index()\n  {\n    $posts = Post::all();\n    return view('posts.index', compact('posts'));\n  }\n  \/**\n   * Store a newly created resource in storage.\n   *\n   * @param  IlluminateHttpRequest  $request\n   * @return IlluminateHttpResponse\n   *\/\n  public function store(Request $request)\n  {\n    $request-&gt;validate([\n      'title' =&gt; 'required|max:255',\n      'body' =&gt; 'required',\n    ]);\n    Post::create($request-&gt;all());\n    return redirect()-&gt;route('posts.index')\n      -&gt;with('success', 'Post created successfully.');\n  }\n  \/**\n   * Update the specified resource in storage.\n   *\n   * @param  IlluminateHttpRequest  $request\n   * @param  int  $id\n   * @return IlluminateHttpResponse\n   *\/\n  public function update(Request $request, $id)\n  {\n    $request-&gt;validate([\n      'title' =&gt; 'required|max:255',\n      'body' =&gt; 'required',\n    ]);\n    $post = Post::find($id);\n    $post-&gt;update($request-&gt;all());\n    return redirect()-&gt;route('posts.index')\n      -&gt;with('success', 'Post updated successfully.');\n  }\n  \/**\n   * Remove the specified resource from storage.\n   *\n   * @param  int  $id\n   * @return IlluminateHttpResponse\n   *\/\n  public function destroy($id)\n  {\n    $post = Post::find($id);\n    $post-&gt;delete();\n    return redirect()-&gt;route('posts.index')\n      -&gt;with('success', 'Post deleted successfully');\n  }\n  \/\/ routes functions\n  \/**\n   * Show the form for creating a new post.\n   *\n   * @return IlluminateHttpResponse\n   *\/\n  public function create()\n  {\n    return view('posts.create');\n  }\n  \/**\n   * Display the specified resource.\n   *\n   * @param  int  $id\n   * @return IlluminateHttpResponse\n   *\/\n  public function show($id)\n  {\n    $post = Post::find($id);\n    return view('posts.show', compact('post'));\n  }\n  \/**\n   * Show the form for editing the specified post.\n   *\n   * @param  int  $id\n   * @return IlluminateHttpResponse\n   *\/\n  public function edit($id)\n  {\n    $post = Post::find($id);\n    return view('posts.edit', compact('post'));\n  }\n}<\/code><\/pre>\n<h2>A\u00f1adir Rutas<\/h2>\n<p>Despu\u00e9s de crear las funciones del controlador y el modelo <code>Post<\/code>, debes a\u00f1adir rutas para las funciones de tu controlador.<\/p>\n<ol start=\"1\">\n<li>Abre <strong>routes\/web.php<\/strong> y elimina la ruta boilerplate que gener\u00f3 la aplicaci\u00f3n. Sustit\u00fayela por el c\u00f3digo que aparece a continuaci\u00f3n para conectar las funciones del controlador a sus respectivas rutas:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">\/\/ returns the home page with all posts\nRoute::get('\/', PostController::class .'@index')-&gt;name('posts.index');\n\/\/ returns the form for adding a post\nRoute::get('\/posts\/create', PostController::class . '@create')-&gt;name('posts.create');\n\/\/ adds a post to the database\nRoute::post('\/posts', PostController::class .'@store')-&gt;name('posts.store');\n\/\/ returns a page that shows a full post\nRoute::get('\/posts\/{post}', PostController::class .'@show')-&gt;name('posts.show');\n\/\/ returns the form for editing a post\nRoute::get('\/posts\/{post}\/edit', PostController::class .'@edit')-&gt;name('posts.edit');\n\/\/ updates a post\nRoute::put('\/posts\/{post}', PostController::class .'@update')-&gt;name('posts.update');\n\/\/ deletes a post\nRoute::delete('\/posts\/{post}', PostController::class .'@destroy')-&gt;name('posts.destroy');<\/code><\/pre>\n<ol start=\"2\">\n<li>Para conectar las rutas, abre <strong>app\/Http\/Controllers\/PostController.php<\/strong> y a\u00f1ade la l\u00ednea siguiente debajo de la l\u00ednea <code>use IlluminateSupportFacadesRoute;<\/code>:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">use IlluminateSupportFacadesRoute;\nuse AppHttpControllersPostController;<\/code><\/pre>\n<p>El archivo <strong>routes\/web.php<\/strong>\u00a0deber\u00eda tener ahora este aspecto:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nuse IlluminateSupportFacadesRoute;\nuse AppHttpControllersPostController;\n\/\/ returns the home page with all posts\nRoute::get('\/', PostController::class .'@index')-&gt;name('posts.index');\n\/\/ returns the form for adding a post\nRoute::get('\/posts\/create', PostController::class . '@create')-&gt;name('posts.create');\n\/\/ adds a post to the database\nRoute::post('\/posts', PostController::class .'@store')-&gt;name('posts.store');\n\/\/ returns a page that shows a full post\nRoute::get('\/posts\/{post}', PostController::class .'@show')-&gt;name('posts.show');\n\/\/ returns the form for editing a post\nRoute::get('\/posts\/{post}\/edit', PostController::class .'@edit')-&gt;name('posts.edit');\n\/\/ updates a post\nRoute::put('\/posts\/{post}', PostController::class .'@update')-&gt;name('posts.update');\n\/\/ deletes a post\nRoute::delete('\/posts\/{post}', PostController::class .'@destroy')-&gt;name('posts.destroy');<\/code><\/pre>\n<h2>Generar Archivos Blade<\/h2>\n<p>Ahora que tienes las rutas, puedes crear los archivos <a href=\"https:\/\/kinsta.com\/es\/blog\/laravel-blade\/\">Blade de Laravel.<\/a> Antes de utilizar Artisan para generar los archivos Blade, crea el comando <code>make:view<\/code>, con el que podr\u00e1s generar los archivos <strong>blade.php<\/strong>.<\/p>\n<ol start=\"1\">\n<li>Ejecuta el siguiente c\u00f3digo en la CLI para crear un archivo de comando <strong>MakeViewCommand<\/strong> dentro de la carpeta <strong>app\/Console\/Commands <\/strong>:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan make:command MakeViewCommand<\/code><\/pre>\n<ol start=\"2\">\n<li>Crea un comando para generar archivos <strong>.blade.php<\/strong> desde la CLI sustituyendo el c\u00f3digo del archivo <strong>MakeViewCommand<\/strong> por lo siguiente:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">&lt;?php\nnamespace AppConsoleCommands;\nuse IlluminateConsoleCommand;\nuse File;\nclass MakeViewCommand extends Command\n{\n  \/**\n   * The name and signature of the console command.\n   *\n   * @var string\n   *\/\n  protected $signature = 'make:view {view}';\n  \/**\n   * The console command description.\n   *\n   * @var string\n   *\/\n  protected $description = 'Create a new blade template.';\n  \/**\n   * Execute the console command.\n   *\n   * @return mixed\n   *\/\n  public function handle()\n  {\n    $view = $this-&gt;argument('view');\n    $path = $this-&gt;viewPath($view);\n    $this-&gt;createDir($path);\n    if (File::exists($path))\n    {\n        $this-&gt;error(\"File {$path} already exists!\");\n        return;\n    }\n    File::put($path, $path);\n    $this-&gt;info(\"File {$path} created.\");\n  }\n  \/**\n   * Get the view full path.\n   *\n   * @param string $view\n   *\n   * @return string\n   *\/\n  public function viewPath($view)\n  {\n    $view = str_replace('.', '\/', $view) . '.blade.php';\n    $path = \"resources\/views\/{$view}\";\n    return $path;\n  }\n  \/**\n   * Create a view directory if it does not exist.\n   *\n   * @param $path\n   *\/\n  public function createDir($path)\n  {\n    $dir = dirname($path);\n    if (!file_exists($dir))\n    {\n        mkdir($dir, 0777, true);\n    }\n  }\n}<\/code><\/pre>\n<h3>Crear una P\u00e1gina de Inicio<\/h3>\n<p>A continuaci\u00f3n, crea tu p\u00e1gina de inicio. La p\u00e1gina de inicio es el archivo <strong>index.blade.php<\/strong>, que enumera todas las entradas.<\/p>\n<ol start=\"1\">\n<li>Para crear la p\u00e1gina de inicio, ejecuta<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan make:view posts.index<\/code><\/pre>\n<p>Esto crea una carpeta <strong>posts<\/strong> dentro de la carpeta <strong>\/resources\/views<\/strong> y un archivo <strong>index.blade.php<\/strong> debajo de ella. La ruta resultante es <strong>\/resources\/views\/posts\/index.blade.php<\/strong>.<\/p>\n<ol start=\"2\">\n<li>A\u00f1ade el siguiente c\u00f3digo dentro del archivo <strong>index.blade.php<\/strong>:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n  &lt;meta charset=\"UTF-8\"&gt;\n  &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n  &lt;meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\"&gt;\n  &lt;link href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.0-alpha1\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\"\nintegrity=\"sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3\/Jr59b6EGGoI1aFkw7cmDA6j6gD\" crossorigin=\"anonymous\"&gt;\n  &lt;title&gt;Posts&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n  &lt;nav class=\"navbar navbar-expand-lg navbar-light bg-warning\"&gt;\n    &lt;div class=\"container-fluid\"&gt;\n      &lt;a class=\"navbar-brand h1\" href={{ route('posts.index') }}&gt;CRUDPosts&lt;\/a&gt;\n      &lt;div class=\"justify-end \"&gt;\n        &lt;div class=\"col \"&gt;\n          &lt;a class=\"btn btn-sm btn-success\" href={{ route('posts.create') }}&gt;Add Post&lt;\/a&gt;\n        &lt;\/div&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n  &lt;\/nav&gt;\n  &lt;div class=\"container mt-5\"&gt;\n    &lt;div class=\"row\"&gt;\n      @foreach ($posts as $post)\n        &lt;div class=\"col-sm\"&gt;\n          &lt;div class=\"card\"&gt;\n            &lt;div class=\"card-header\"&gt;\n              &lt;h5 class=\"card-title\"&gt;{{ $post-&gt;title }}&lt;\/h5&gt;\n            &lt;\/div&gt;\n            &lt;div class=\"card-body\"&gt;\n              &lt;p class=\"card-text\"&gt;{{ $post-&gt;body }}&lt;\/p&gt;\n            &lt;\/div&gt;\n            &lt;div class=\"card-footer\"&gt;\n              &lt;div class=\"row\"&gt;\n                &lt;div class=\"col-sm\"&gt;\n                  &lt;a href=\"{{ route('posts.edit', $post-&gt;id) }}\"\n            class=\"btn btn-primary btn-sm\"&gt;Edit&lt;\/a&gt;\n                &lt;\/div&gt;\n                &lt;div class=\"col-sm\"&gt;\n                    &lt;form action=\"{{ route('posts.destroy', $post-&gt;id) }}\" method=\"post\"&gt;\n                      @csrf\n                      @method('DELETE')\n                      &lt;button type=\"submit\" class=\"btn btn-danger btn-sm\"&gt;Delete&lt;\/button&gt;\n                    &lt;\/form&gt;\n                &lt;\/div&gt;\n              &lt;\/div&gt;\n            &lt;\/div&gt;\n          &lt;\/div&gt;\n        &lt;\/div&gt;\n      @endforeach\n    &lt;\/div&gt;\n  &lt;\/div&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>El c\u00f3digo anterior crea una p\u00e1gina HTML sencilla que utiliza <a href=\"https:\/\/getbootstrap.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bootstrap<\/a> para el estilo. Establece una barra de navegaci\u00f3n y una plantilla de cuadr\u00edcula que enumera todas las entradas de la base de datos con detalles y dos botones de acci\u00f3n \u2014 editar y eliminar \u2014 utilizando el ayudante <code>@foreach<\/code> Blade.<\/p>\n<p>El bot\u00f3n <strong>Edit<\/strong>\u00a0lleva al usuario a la p\u00e1gina <strong>Edit post<\/strong>, donde puede editar la entrada. El bot\u00f3n <strong>Delete<\/strong> borra la entrada de la base de datos utilizando <code>{{ route('posts.destroy', $post-&gt;id) }}<\/code> con un m\u00e9todo <code>DELETE<\/code>.<\/p>\n<p><strong>Nota<\/strong>: El c\u00f3digo de la barra de navegaci\u00f3n de todos los archivos es el mismo que el del archivo anterior.<\/p>\n<ol start=\"3\">\n<li>Crea la p\u00e1gina <strong>create.blade.php<\/strong>. El archivo Blade llamado <strong>create<\/strong>\u00a0a\u00f1ade entradas a la base de datos. Utiliza el siguiente comando para generar el archivo:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan make:view posts.create<\/code><\/pre>\n<p>Esto genera un archivo <strong>create.blade.php<\/strong> dentro de la carpeta<strong> \/resources\/views\/posts <\/strong>.<\/p>\n<ol start=\"4\">\n<li>A\u00f1ade el siguiente c\u00f3digo al archivo <strong>create.blade.php<\/strong>:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">\/\/ same as the previous file. Add the following after the nav tag and before the closing body tag.\n&lt;div class=\"container h-100 mt-5\"&gt;\n  &lt;div class=\"row h-100 justify-content-center align-items-center\"&gt;\n    &lt;div class=\"col-10 col-md-8 col-lg-6\"&gt;\n      &lt;h3&gt;Add a Post&lt;\/h3&gt;\n      &lt;form action=\"{{ route('posts.store') }}\" method=\"post\"&gt;\n        @csrf\n        &lt;div class=\"form-group\"&gt;\n          &lt;label for=\"title\"&gt;Title&lt;\/label&gt;\n          &lt;input type=\"text\" class=\"form-control\" id=\"title\" name=\"title\" required&gt;\n        &lt;\/div&gt;\n        &lt;div class=\"form-group\"&gt;\n          &lt;label for=\"body\"&gt;Body&lt;\/label&gt;\n          &lt;textarea class=\"form-control\" id=\"body\" name=\"body\" rows=\"3\" required&gt;&lt;\/textarea&gt;\n        &lt;\/div&gt;\n        &lt;br&gt;\n        &lt;button type=\"submit\" class=\"btn btn-primary\"&gt;Create Post&lt;\/button&gt;\n      &lt;\/form&gt;\n    &lt;\/div&gt;\n  &lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>El c\u00f3digo anterior crea un formulario con los campos <code>title<\/code> y <code>body<\/code> y un bot\u00f3n <code>submit<\/code> para a\u00f1adir una entrada a la base de datos a trav\u00e9s de la acci\u00f3n <code>{{ route('posts.store') }}<\/code> con un m\u00e9todo <code>POST<\/code>.<\/p>\n<ol start=\"5\">\n<li>Crea la p\u00e1gina <strong>Edit post<\/strong>\u00a0para editar entradas en la base de datos. Utiliza el siguiente comando para generar el archivo:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan make:view posts.edit<\/code><\/pre>\n<p>Esto crea un archivo <strong>edit.blade.php<\/strong> dentro de la carpeta <strong>\/resources\/views\/posts <\/strong>.<\/p>\n<ol start=\"6\">\n<li>A\u00f1ade el siguiente c\u00f3digo al archivo <strong>edit.blade.php:<\/strong><\/li>\n<\/ol>\n<pre><code class=\"language-php\">&lt;div class=\"container h-100 mt-5\"&gt;\n  &lt;div class=\"row h-100 justify-content-center align-items-center\"&gt;\n    &lt;div class=\"col-10 col-md-8 col-lg-6\"&gt;\n      &lt;h3&gt;Update Post&lt;\/h3&gt;\n      &lt;form action=\"{{ route('posts.update', $post-&gt;id) }}\" method=\"post\"&gt;\n        @csrf\n        @method('PUT')\n        &lt;div class=\"form-group\"&gt;\n          &lt;label for=\"title\"&gt;Title&lt;\/label&gt;\n          &lt;input type=\"text\" class=\"form-control\" id=\"title\" name=\"title\"\n            value=\"{{ $post-&gt;title }}\" required&gt;\n        &lt;\/div&gt;\n        &lt;div class=\"form-group\"&gt;\n          &lt;label for=\"body\"&gt;Body&lt;\/label&gt;\n          &lt;textarea class=\"form-control\" id=\"body\" name=\"body\" rows=\"3\" required&gt;{{ $post-&gt;body }}&lt;\/textarea&gt;\n        &lt;\/div&gt;\n        &lt;button type=\"submit\" class=\"btn mt-3 btn-primary\"&gt;Update Post&lt;\/button&gt;\n      &lt;\/form&gt;\n    &lt;\/div&gt;\n  &lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>El c\u00f3digo anterior crea un formulario con los campos <code>title<\/code> y <code>body<\/code> y un bot\u00f3n de env\u00edo para editar una entrada con el <code>id<\/code> especificado en la base de datos a trav\u00e9s de la acci\u00f3n <code>{{ route('posts.update') }}<\/code> con un m\u00e9todo <code>PUT<\/code>.<\/p>\n<ol start=\"7\">\n<li>A continuaci\u00f3n, reinicia tu servidor de aplicaciones utilizando el c\u00f3digo siguiente:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan serve<\/code><\/pre>\n<p>Visita <code>http:\/\/127.0.0.1:8000<\/code> en tu navegador para ver tu nuevo blog. Haz clic en el bot\u00f3n <strong>Add post<\/strong>\u00a0para a\u00f1adir nuevas entradas.<\/p>\n<h2>Despliega y Prueba tu Aplicaci\u00f3n CRUD<\/h2>\n<p>Prepara tu aplicaci\u00f3n para el despliegue como se indica a continuaci\u00f3n.<\/p>\n<ol start=\"1\">\n<li>Haz que el despliegue sea f\u00e1cil y sencillo declarando la carpeta p\u00fablica. A\u00f1ade un archivo <strong>.htaccess<\/strong> a el root de la carpeta de la aplicaci\u00f3n con el siguiente c\u00f3digo:<\/li>\n<\/ol>\n<pre><code class=\"language-apacheconf\">&lt;IfModule mod_rewrite.c &gt;\n  RewriteEngine On\n  RewriteRule ^(.*)$ public\/$1 [L]\n&lt;\/IfModule &gt;<\/code><\/pre>\n<ol start=\"2\">\n<li>Obliga a tu aplicaci\u00f3n a utilizar <code>HTTPS<\/code> a\u00f1adiendo el siguiente c\u00f3digo encima de tus rutas dentro del archivo <strong>routes\/web.php<\/strong>:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">use IlluminateSupportFacadesURL;\nURL::forceScheme('https');<\/code><\/pre>\n<ol start=\"3\">\n<li>Env\u00eda tu c\u00f3digo a un repositorio Git. Kinsta soporta despliegues desde GitHub, GitLab o Bitbucket.<\/li>\n<\/ol>\n<h3>Configurar un Proyecto en MyKinsta<\/h3>\n<ol start=\"1\">\n<li>Crea una cuenta <a href=\"https:\/\/kinsta.com\/es\/mykinsta\/\">MyKinsta<\/a> si a\u00fan no tienes una.<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>Accede a tu cuenta y haz clic en el bot\u00f3n <strong>A\u00f1adir Servicio<\/strong> en el Panel de Control para crear una nueva aplicaci\u00f3n.<\/li>\n<\/ol>\n<ol start=\"3\">\n<li>Si eres nuevo en la aplicaci\u00f3n, con\u00e9ctate a tu cuenta de GitHub, GitLab o Bitbucket y concede permisos espec\u00edficos.<\/li>\n<\/ol>\n<ol start=\"4\">\n<li>Rellena el formulario, y a\u00f1ade el <code>APP_KEY<\/code>. Puedes encontrar su valor correspondiente en tu archivo <strong>.env<\/strong>.<\/li>\n<\/ol>\n<ol start=\"5\">\n<li>Selecciona tus recursos de construcci\u00f3n y si quieres utilizar la ruta de construcci\u00f3n de tu aplicaci\u00f3n o construir tu aplicaci\u00f3n con Dockerfile. Para esta demostraci\u00f3n, deja que MyKinsta construya la aplicaci\u00f3n bas\u00e1ndose en tu repositorio.<\/li>\n<\/ol>\n<ol start=\"6\">\n<li>Especifica los diferentes procesos que quieres ejecutar durante el despliegue. Puedes dejarlo en blanco en este punto.<\/li>\n<\/ol>\n<ol start=\"7\">\n<li>Por \u00faltimo, a\u00f1ade tu m\u00e9todo de pago.<\/li>\n<\/ol>\n<p>Despu\u00e9s de confirmar tu m\u00e9todo de pago, MyKinsta despliega tu aplicaci\u00f3n y te asigna una URL como se muestra a continuaci\u00f3n:<\/p>\n<figure style=\"width: 492px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-crud-mykinsta-deployment-process.png\" alt=\"Despliegue con \u00e9xito utilizando MyKinsta\" width=\"492\" height=\"618\"><figcaption class=\"wp-caption-text\">Despliegue con \u00e9xito.<\/figcaption><\/figure>\n<p>Puedes visitar el enlace, pero obtendr\u00e1s una p\u00e1gina <code>500 | Server Error<\/code> porque la aplicaci\u00f3n necesita una conexi\u00f3n de base de datos v\u00e1lida para funcionar. La siguiente secci\u00f3n resuelve este problema.<\/p>\n<h3>Crear una Base de Datos a trav\u00e9s de MyKinsta<\/h3>\n<ol start=\"1\">\n<li>Para crear una base de datos, ve a tu panel de MyKinsta y haz clic en <strong>A\u00f1adir Servicio<\/strong>.<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>Selecciona <strong>Base de Datos<\/strong> y rellena el formulario con el nombre, tipo, nombre de usuario y contrase\u00f1a que prefieras para la base de datos. A\u00f1ade una ubicaci\u00f3n de centro de datos y un tama\u00f1o de base de datos que se ajuste a tu aplicaci\u00f3n.<\/li>\n<\/ol>\n<ol start=\"3\">\n<li>La p\u00e1gina siguiente muestra el resumen de costes y tu forma de pago. Haz clic en <strong>Crear Base de Datos<\/strong> para completar el proceso.<\/li>\n<\/ol>\n<ol start=\"4\">\n<li>Tras crear la base de datos, MyKinsta te redirige a tu lista de servicios. Haz clic en la base de datos que acabas de crear y despl\u00e1zate hasta <strong>Conexiones Externas<\/strong>. Copia las credenciales de la base de datos.<\/li>\n<\/ol>\n<ol start=\"5\">\n<li>Vuelve a la p\u00e1gina de <strong>Despliegue <\/strong>de la aplicaci\u00f3n y haz clic en <strong>Configuraci\u00f3n<\/strong>. A continuaci\u00f3n, despl\u00e1zate hasta <strong>Variables de Entorno<\/strong> y haz clic en <strong>A\u00f1adir Variables de Entorno<\/strong>. A\u00f1ade las credenciales de la base de datos como variables de entorno en el siguiente orden:<\/li>\n<\/ol>\n<pre><code class=\"language-env\">DB_CONNECTION=mysql\nDB_HOST=External hostname\nDB_PORT=External port\nDB_DATABASE=Database name\nDB_USERNAME=Username\nDB_PASSWORD=Password<\/code><\/pre>\n<p>La lista de variables de entorno de la aplicaci\u00f3n deber\u00eda tener ahora este aspecto:<\/p>\n<figure style=\"width: 561px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-crud-env-variables-kinsta.png\" alt=\"La lista de variables .env.\" width=\"561\" height=\"629\"><figcaption class=\"wp-caption-text\">La lista de variables .env.<\/figcaption><\/figure>\n<ol start=\"6\">\n<li>Ve a la p\u00e1gina de <strong>Despliegue <\/strong>de tu aplicaci\u00f3n y despliega manualmente tu aplicaci\u00f3n haciendo clic en <strong>Desplegar Ahora <\/strong>para aplicar estos cambios. Hasta ahora, has creado una base de datos y la has conectado a tu aplicaci\u00f3n.<\/li>\n<\/ol>\n<ol start=\"7\">\n<li>Por \u00faltimo, para crear las tablas de la base de datos en tu base de datos MyKinsta, conecta la base de datos a tu aplicaci\u00f3n local actualizando tu archivo <strong>.env<\/strong> con las mismas credenciales que introdujiste en tu aplicaci\u00f3n en MyKinsta y ejecuta el siguiente comando:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan migrate<\/code><\/pre>\n<p>Este comando ejecuta todos los archivos de migraci\u00f3n. Crea todas las tablas definidas en tu aplicaci\u00f3n MyKinsta.<\/p>\n<p>Ahora, puedes probar tu aplicaci\u00f3n con la URL asignada tras el primer despliegue.<\/p>\n<h2>Resumen<\/h2>\n<p>Laravel es un framework completo para crear aplicaciones web robustas y escalables que requieren funcionalidad CRUD. Con su sintaxis intuitiva y sus potentes caracter\u00edsticas, Laravel facilita la construcci\u00f3n de operaciones CRUD en tu aplicaci\u00f3n.<\/p>\n<p>En este art\u00edculo se han tratado los conceptos fundamentales de las operaciones CRUD y c\u00f3mo implementarlas utilizando las funciones integradas de Laravel. Tambi\u00e9n explica:<\/p>\n<ul>\n<li>C\u00f3mo crear una base de datos en MyKinsta y conectarla a tu aplicaci\u00f3n<\/li>\n<li>C\u00f3mo utilizar las migraciones de Laravel para definir la tabla de la base de datos, crear el archivo controlador y sus funciones<\/li>\n<li>Definir un modelo y conectarlo al controlador. El enrutamiento de Laravel genera archivos Blade para crear las p\u00e1ginas y formularios correspondientes y desplegar y probar la aplicaci\u00f3n utilizando MyKinsta<\/li>\n<\/ul>\n<p>Ahora que has visto lo f\u00e1cil que es realizar operaciones CRUD en Laravel, echa un <a href=\"https:\/\/my.kinsta.com\/login?lang=es\">vistazo a MyKinsta<\/a> para el desarrollo y <a href=\"https:\/\/sevalla.com\/application-hosting\/\">alojamiento <\/a>de aplicaciones web.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Laravel es un popular framework PHP para crear aplicaciones web modernas y din\u00e1micas en el panorama actual de desarrollo web, que evoluciona r\u00e1pidamente. Una de sus &#8230;<\/p>\n","protected":false},"author":290,"featured_media":69150,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1303],"class_list":["post-69149","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-laravel"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Hacer CRUD (Create, Read, Update, and Delete) con Laravel<\/title>\n<meta name=\"description\" content=\"Las operaciones CRUD son la columna vertebral de cualquier app con base de datos. Aprende c\u00f3mo realizar todas las operaciones CRUD con Laravel.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\u00f3mo hacer CRUD (Create, Read, Update, and Delete. Crear, Leer, Actualizar y Eliminar) con Laravel\" \/>\n<meta property=\"og:description\" content=\"Las operaciones CRUD son la columna vertebral de cualquier app con base de datos. Aprende c\u00f3mo realizar todas las operaciones CRUD con Laravel.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-17T09:05:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-22T05:13:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-crud.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"6084\" \/>\n\t<meta property=\"og:image:height\" content=\"3042\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Marcia Ramos\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Las operaciones CRUD son la columna vertebral de cualquier app con base de datos. Aprende c\u00f3mo realizar todas las operaciones CRUD con Laravel.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-crud.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Marcia Ramos\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/\"},\"author\":{\"name\":\"Marcia Ramos\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116\"},\"headline\":\"C\u00f3mo hacer CRUD (Create, Read, Update, and Delete. Crear, Leer, Actualizar y Eliminar) con Laravel\",\"datePublished\":\"2023-08-17T09:05:47+00:00\",\"dateModified\":\"2023-08-22T05:13:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/\"},\"wordCount\":2583,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-crud.jpg\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/\",\"name\":\"Hacer CRUD (Create, Read, Update, and Delete) con Laravel\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-crud.jpg\",\"datePublished\":\"2023-08-17T09:05:47+00:00\",\"dateModified\":\"2023-08-22T05:13:16+00:00\",\"description\":\"Las operaciones CRUD son la columna vertebral de cualquier app con base de datos. Aprende c\u00f3mo realizar todas las operaciones CRUD con Laravel.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-crud.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-crud.jpg\",\"width\":6084,\"height\":3042},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"C\u00f3mo hacer CRUD (Create, Read, Update, and Delete. Crear, Leer, Actualizar y Eliminar) con Laravel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116\",\"name\":\"Marcia Ramos\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g\",\"caption\":\"Marcia Ramos\"},\"description\":\"I'm the Editorial Team Lead at Kinsta. I'm a open source enthusiast and I love coding. With more than 10 years of technical writing and editing for the tech industry, I love collaborating with people to create clear and concise pieces of content and improve workflows.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/marciadiasramos\/\"],\"honorificSuffix\":\"B.Sc.\",\"gender\":\"Female\",\"knowsLanguage\":[\"English\",\"Portuguese\"],\"jobTitle\":\"Editorial Team Lead\",\"worksFor\":\"Kinsta Inc.\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/author\/marciaramos\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Hacer CRUD (Create, Read, Update, and Delete) con Laravel","description":"Las operaciones CRUD son la columna vertebral de cualquier app con base de datos. Aprende c\u00f3mo realizar todas las operaciones CRUD con Laravel.","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:\/\/kinsta.com\/es\/blog\/laravel-crud\/","og_locale":"es_ES","og_type":"article","og_title":"C\u00f3mo hacer CRUD (Create, Read, Update, and Delete. Crear, Leer, Actualizar y Eliminar) con Laravel","og_description":"Las operaciones CRUD son la columna vertebral de cualquier app con base de datos. Aprende c\u00f3mo realizar todas las operaciones CRUD con Laravel.","og_url":"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2023-08-17T09:05:47+00:00","article_modified_time":"2023-08-22T05:13:16+00:00","og_image":[{"width":6084,"height":3042,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-crud.jpg","type":"image\/jpeg"}],"author":"Marcia Ramos","twitter_card":"summary_large_image","twitter_description":"Las operaciones CRUD son la columna vertebral de cualquier app con base de datos. Aprende c\u00f3mo realizar todas las operaciones CRUD con Laravel.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-crud.jpg","twitter_creator":"@Kinsta_ES","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Marcia Ramos","Tiempo de lectura":"16 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/"},"author":{"name":"Marcia Ramos","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116"},"headline":"C\u00f3mo hacer CRUD (Create, Read, Update, and Delete. Crear, Leer, Actualizar y Eliminar) con Laravel","datePublished":"2023-08-17T09:05:47+00:00","dateModified":"2023-08-22T05:13:16+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/"},"wordCount":2583,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-crud.jpg","inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/es\/blog\/laravel-crud\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/","url":"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/","name":"Hacer CRUD (Create, Read, Update, and Delete) con Laravel","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-crud.jpg","datePublished":"2023-08-17T09:05:47+00:00","dateModified":"2023-08-22T05:13:16+00:00","description":"Las operaciones CRUD son la columna vertebral de cualquier app con base de datos. Aprende c\u00f3mo realizar todas las operaciones CRUD con Laravel.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/laravel-crud\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-crud.jpg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/08\/laravel-crud.jpg","width":6084,"height":3042},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/laravel-crud\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinsta.com\/es\/secciones\/laravel\/"},{"@type":"ListItem","position":3,"name":"C\u00f3mo hacer CRUD (Create, Read, Update, and Delete. Crear, Leer, Actualizar y Eliminar) con Laravel"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116","name":"Marcia Ramos","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g","caption":"Marcia Ramos"},"description":"I'm the Editorial Team Lead at Kinsta. I'm a open source enthusiast and I love coding. With more than 10 years of technical writing and editing for the tech industry, I love collaborating with people to create clear and concise pieces of content and improve workflows.","sameAs":["https:\/\/www.linkedin.com\/in\/marciadiasramos\/"],"honorificSuffix":"B.Sc.","gender":"Female","knowsLanguage":["English","Portuguese"],"jobTitle":"Editorial Team Lead","worksFor":"Kinsta Inc.","url":"https:\/\/kinsta.com\/es\/blog\/author\/marciaramos\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/69149","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/290"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=69149"}],"version-history":[{"count":9,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/69149\/revisions"}],"predecessor-version":[{"id":71575,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/69149\/revisions\/71575"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69149\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69149\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69149\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69149\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69149\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69149\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69149\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69149\/translations\/es"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/69149\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/69150"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=69149"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=69149"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=69149"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}