18. Cómo agregar y actualizar registros desde un formulario

Agregar y actualizar registros desde un formulario es una tarea común en el desarrollo de aplicaciones web con Laravel. Aprenderás a utilizar la función create y update, respectivamente, para agregar y actualizar registros en la base de datos. La función create te permite agregar un nuevo registro a una tabla utilizando los valores proporcionados por el usuario en un formulario, mientras que la función update te permite actualizar un registro existente en función de su ID utilizando los valores proporcionados por el usuario en un formulario. Aprenderás a utilizar el método fill para actualizar los valores de un registro de manera segura y a validar los datos del formulario antes de agregar o actualizar un registro. También conocerás cómo utilizar la función redirect para redirigir al usuario a una página específica después de agregar o actualizar un registro. Con estos conocimientos, podrás agregar y actualizar registros de manera segura y eficiente en tus aplicaciones web desarrolladas en Laravel.


6 comentarios

Inicia sesión para comentar

Comentarios:

  • Buenardo Orozco

    Buenardo Orozco hace 1 mes

    tengo una duda es que por defecto el controlador me exijje el  __invoke 

    como ago para que no pase esto 

    • Buenardo Orozco hace 1 mes

      ya encontre la solucion la dejo aca por si le pasa a algien mas 

      al momento de declarar las rutas 

      route::get('curso',controller,'index');

      esa manera esta mal no da un error de sintaxis pero tampoco se ejecuta de la forma ue deseo solo se va por defecto al metodo __inboke

      bueno la solucion fue agregar [] tal como se mencionan en el curso 

  • Jesus Parra

    Jesus Parra hace 3 meses

    Excelente

  • Marco Cordero

    Marco Cordero hace 6 meses

    Tengo una duda que no se explica muy bien en el video. Cuando creamos el a:
    <a href="{{route('courses.edit', $course)}}">Editar Curso</a>
    y su respectiva ruta:
    Route::get('courses/{id}/edit', [CourseController::class, 'edit'])->name('courses.edit');
    Como sabe Laravel que la url que quiero es courses/51/edit???
    Cuando le cambie el {id} por {name}, me siguio dando courses/51/edit. 
     

    • Victor Arana Flores hace 6 meses

      ¿Cambias el id por name? 

      Laravel busca por defecto un registro utilizando el id. Si quieres usar otros campos tienes que cambiarlo en el modelo, y eso explico en la parte en que hablamos sobre url amigables.

    • Marco Cordero hace 6 meses

      Gracias Victor, justo hoy lo vi en el video de URL's. Gracias por tus videos!!

  • Walter

    Walter hace 1 año

    ? Formulario de edición

          En la vista show.blade.php agregamos el enlace:

    <br>
    <a href="{{ route('cursos.edit', $curso) }}">Editar curso</a>

          Creamos la ruta en web.php:

    Route::get('cursos/{id}/edit', [CursoController::class, 'edit'])->name('cursos.edit');

          Ahora necesitamos crear el método edit en el controlador:

    public function edit($id) {
    	$curso = Curso::find($id);
    }

          Podemos re-escribir el método de la siguiente manera, donde Laravel entiende que quiero que ese $id sea una instancia de la clase Curso cuyo id sea lo que le estoy pasando por URL.

    public function edit(Curso $curso) {
    	return view('cursos.edit', compact('curso'));
    }

          Para evitar confusión hemos cambiado $id por $curso en el método anterior y también en la ruta: 

    Route::get('cursos/{curso}/edit', [CursoController::class, 'edit'])->name('cursos.edit');

          Lo mismo podemos hacer en la ruta show:

    Route::get('cursos/{curso}', [CursoController::class, 'show'])->name('cursos.show');

          Y también hacemos el cambio en el método show en el controlador:

    public function show(Curso $curso) {
    	return view('cursos.show', compact('curso'));
    }

          Creamos la vista edit.blade.php para cursos:

    @extends('layouts.plantilla')
    @section('title','Cursos edit')
    @section('content')
          <h1>En esta página podrás editar un curso</h1>
          <form action="{{ route('cursos.update', $curso) }}" method="POST">
                @csrf
                @method('post')
                <label>
                      Nombre:
                      <br>
                      <input type="text" name="name" value="{{ $curso->name }}">
                </label>
    
                <br>
                <label>
                      Descripción:
                      <br>
                      <textarea name="description" rows="5"> value="{{$curso->description}}"</textarea>
                </label>
    
                <br>
                <label>
                      Categoría:
                      <br>
                      <input type="text" name="categoria" value="{{ $curso->categoria }}">
                </label>
                <br>
                <button type="submit">Enviar formulario</button>
          </form>
    @endsection

          Ahora creamos una ruta donde vaya esta información cuando hagamos click en el botón, y sea esa ruta la que se encargue de actualizar el registro:

    Route::put('cursos/{curso}', [CursoController::class, 'update'])->name('cursos.update');

          Por último creamos el método update en el controlador:

          public function update(Request $request, Curso $curso) {
                $curso->name = $request->name;
                $curso->description= $request->description;
                $curso->categoria= $request->categoria;
                $curso->save();
                return redirect()->route('cursos.show', $cursos);
          }

     

  • Walter

    Walter hace 1 año

    ? Formulario de creación

          En la vista create.blade.php de cursos agregamos:

          <form action="">
                <label>
                      Nombre:
                      <br>
                      <input type="text" name="name">
                </label>
    
                <br>
                <label>
                      Descripción:
                      <br>
                      <textarea name="description" rows="5"></textarea>
                </label>
    
                <br>
                <label>
                      Categoría:
                      <br>
                      <input type="text" name="categoria">
                </label>
                <br>
                <button type="submit">Enviar formulario</button>
          </form>

          Creamos la ruta en web.php que recibirá los datos del formulario:

    Route::post('cursos', [CursoController::class, 'store'])->name('cursos.store');

          Vamos al controlador a crear el método store:

    public function store(Request $request) {
    	$curso = new Curso();
    	$curso->name = $request->name;
    	$curso->description = $request->description;
    	$curso->categoria = $request->categoria;
    	$curso->save();
    	
    	return redirect()->route('cursos.show', $curso->id); //podemos pasar solo $curso
    }

          Agregamos la ruta, el método y token al formulario:

          <form action="{{ route('cursos.store') }}" method="POST">
                @csrf

     

  • Ricky Brito T

    Ricky Brito T hace 1 año

    En controladores CursoController los metodos de destroy ,update ,edit y show como parametro es $curso porque seria como el $id .