Laravel, parte 8: CRUD

24 Nov

Cuando creamos una aplicación web, hay ciertas cosas que debemos repetir una y otra vez, una de esas cosas son las funcionalidades para trabajar con los registros de nuestras tablas. Esto al principio puede ser divertido, pero si tenemos un sitio muy amplio, puede terminar haciéndose repetitivo y llevarnos demasiado tiempo.

Nuestra pequeña aplicación Laravel, con la que venimos trabajando hasta ahora, cuenta con una sola tabla, “users”, pero más adelante tendrá más tablas, y la mayoría debería contar con un módulo para administrarla, para insertar, modificar, eliminar y listar.

La palabra “CRUD”, que se ha puesto de moda últimamente, significa Create (crear), Read (leer), Update (modificar) y Delete (eliminar) Nosotros deberíamos contar con un módulo en nuestro aplicación con esto para así crear, modificar, eliminar y mostrar usuarios, en grupo o individualmente.

A esas alturas, con lo que hemos aprendido, y teniendo en cuenta de las facilidades que nos provee Eloquent, deberíamos estar capacitados para crear estas funcionalidades. Sin embargo Laravel cuenta con un sistema de CRUD capaz de entender esto y hacerlo más fácil para nosotros.

Verbos HTTP

Al trabajar con registros, en Laravel, existen cuatro formas de enviar peticiones al servidor: por GET, por POST, por PUT y por DELETE. Presumo que estás familiarizado con las dos primeras, pero tal vez no conozcas las dos últimas. Bien, GET se utiliza para mostrar registros, POST para insertar, PUT para modificar y DELETE para eliminar.

Sin más palabrería vamos a crear nuestro primer módulo CRUD para administrar los usuarios de nuestra aplicación. Así que para ello vamos a app -> controllers y dentro creamos un archivo con el nombre UsersController.php.

Ahora vamos a abrir el archivo routes.php, dentro de app, y vamos a agregar la siguiente línea:

Route::resource('users', 'UsersController');

El método resources(), recibe los mismos parámetros que controller(), pero también nos permitirá indicarle a Laravel que ese controlador, UsersController, será un módulo para hacer CRUD.

Si ahora abrimos la consola, y entramos a nuestro proyecto:

cd C:\xampp\htdocs\proyecto

E ingresamos lo siguiente:

php artisan routes

Laravel nos mostrará las rutas que se han generado para ese controlador, los distintos métodos de acceder a las mismas y el nombre de las acciones.

(Nota: En dónde es {users} se refiere a id dinámico que se pasa por url)

Las acciones que debemos crear para el funcionamiento correcto de este controlador son siente: index(), show(), create(), store(), edit(), update() y destroy().

Verb Path Action Route Name
GET /users index resource.index
GET /users/create create resource.create
POST /users store resource.store
GET /users/{id} show resource.show
GET /users/{id}/edit edit resource.edit
PUT/PATCH /users/{id} update resource.update
DELETE /users/{id} destroy resource.destroy

(Fuente: http://four.laravel.com/docs/controllers)

Si te fijas bien, hay rutas similares, a pesar de que llaman a distintas acciones. Por ejemplo en show, update y destroy; el path es el mismo: “/users/{id}”, lo que le indicará al servidor qué es lo que debe hacer será la forma en que viene la petición. GET para show, PUT para update y DELETE para destroy.

Entonces vamos a editar nuestro archivo UsersController.php con el siguiente código:

<?php
class UsersController extends BaseController {
   public function index() {
   }
   public function show($id) { 
   }
   public function create() { 
   }
   public function store() { 
   }
   public function edit($id) { 
   }
   public function update($id) { 
   }
   public function destroy($id) { 
   }
}
?>

Y también crearemos las vistas que usarán estas acciones. Así que primero vamos a app -> views, y dentro creamos una carpeta users. Dentro de éste vamos a crear tres vistas: index.blade.phpshow.blade.phpsave.blade.php.

Ahora, vamos a explicar estas acciones.

El método index() nos servirá para mostrar un listado con registros, en nuestro caso de usuarios, se accederá por GET. Con show() se recuperará los datos de un registro en particular, recibirá como parámetro justamente el id de ese registro, y esta petición también será por GET.

Los métodos create() y store() trabajarán en conjunto. El primero nos mostrará un formulario para insertar un nuevo registro y se accederá por GET. Y el segundo será la acción que inserte el registro que recibió del formulario, en este caso, como se inserta el tipo de petición será POST.

En el caso de los métodos edit() y update(). El primero nos mostrará un formulario para modificar un registro y se accederá por GET. Y el segundo será la acción que modifique ese registro, y  se accederá por PUT. En el caso de ambos métodos recibirán un parámetro que será el id del registro a modificar.

Y finalmente tendremos la acción destroy(), que servirá para eliminar un registro, y se accederá por el método DELETE. Recibirá un parámetro, el id del registro a eliminar.

Bien, ahora que sabemos esto, podemos editar nuestro controlador UsersController.

Mostrar registros

Comencemos por la acción index(). Como dijimos, ésta acción nos mostrará los registros:

public function index() {
   $users = User::all();
   return View::make('users.index')->with('users', $users);
}

Simplemente recuperamos todos los usuarios con el método all() y luego devolvemos el contenido de la vista index.blade.php, a la que le pasamos la variable con los usuarios.

Entonces vamos a editar la vista index.blade.php con el siguiente código:

<!DOCTYPE html>
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title> Usuarios </title>
 </head>
 <body>
    <h1> Usuarios </h1>
    @if(Session::has('notice'))
       <p> <strong> {{ Session::get('notice') }} </strong> </p>
    @endif
    <p> Crear nuevo usuario </p>
    @if($users->count())
       <table style="border: solid 1px #000;">
          <thead>
          <tr>
             <th style="width: 200px; border-bottom: solid 1px #000;"> Nombre real </th>
             <th style="width: 200px; border-bottom: solid 1px #000;"> Email </th>
             <th style="width: 50px; border-bottom: solid 1px #000;"> Nivel </th>
             <th style="width: 50px; border-bottom: solid 1px #000;"> Estado </th>
             <th style="width: 50px; border-bottom: solid 1px #000;"> </th>
             <th style="width: 50px; border-bottom: solid 1px #000;"> </th>
             <th style="width: 50px; border-bottom: solid 1px #000;"> </th>
          </tr>
          </thead>
          <tbody>
          @foreach($users as $item)
             <tr>
                <td style="text-align: center;"> {{ $item->real_name }} </td>
                <td style="text-align: center;"> {{ $item->email }} </td>
                <td style="text-align: center;"> {{ $item->level }} </td>
                <td style="text-align: center;"> {{ ($item->active) ? 'Sí' : 'No' }} </td>
                <td style="text-align: center;"> Ver </td>
                <td style="text-align: center;"> Editar </td>
                <td style="text-align: center;"> Eliminar </td>
             </tr>
          @endforeach
          </tbody>
       </table>
    @else
       <p> No se han encontrado usuarios </p>
    @endif
 </body>
</html>

Bien, voy a explicar el código, que al principio puede parecer un poco una ensalada.

En primer lugar tendremos un condicional if que verificará si hay usuarios creados con el método count():

@if($users->count())

De haberlos mostrará una tabla con los datos de estos usuarios, pero de lo contrario imprimirá por pantalla un párrafo indicando que no se han encontrado usuarios.

Con respecto a la línea

@if(Session::has('notice'))
   <p> <strong> {{ Session::get('notice') }} </strong> </p>
@endif

Esta línea verificará si hay avisos para el usuario, y los mostrará por pantalla. Esto puede darse por ejemplo cuando insertamos un usuario nuevo, para mostrar el mensaje indicando sobre la acción realizada.

Insertar registros

Ahora vamos a comenzar creando nuestro nuevo usuario. Por empezar vamos a crear las dos acciones que nos permitirán realizar esto, create() para mostrar el formulario:

public function create() {
   $user = new User();
   return View::make('users.save')->with('user', $user);
}

Y store() para crear un usuario con los datos del formulario enviado:

public function store() {
   $user = new User();
   $user->real_name = Input::get('real_name');
   $user->email = Input::get('email');
   $user->password = Hash::make(Input::get('password'));
   $user->level = Input::get('level');
   $user->active = true;
   $user->save();
   return Redirect::to('users')->with('notice', 'El usuario ha sido creado correctamente.');
}

Gracias a la clase Input y al método get(), podemos recuperar los valores enviados desde los campos de formulario.

En la acción create() instanciamos un objeto nuevo User, y pasamos esta variable a la vista save.blade.php. Esto se debe a que esta vista será el formulario que permita insertar y modificar registros. En este caso el registro será nuevo así que los valores del objeto estarán vacíos.

Mientras que la acción store() recibirá los datos enviados de este formulario y guardará un nuevo registro. Finalmente redireccionará a la página principal pasándole un mensaje:

->with('notice', 'El usuario ha sido creado correctamente.');

Para eso en la acción index las líneas:

@if(Session::has('notice'))
   <p> <strong> {{ Session::get('notice') }} </strong> </p>
@endif

En este caso, luego de insertar un nuevo usuario, se mostrará por pantalla el texto: “El usuario ha sido creado correctamente.”

Modificar registros

Ahora vamos a crear los métodos para modificar un registro.

El método edit():

public function edit($id) {
   $user = User::find($id);
   return View::make('users.save')->with('user', $user);
}

Y update():

public function update($id) {
   $user = User::find($id);
   $user->real_name = Input::get('real_name');
   $user->email = Input::get('email');
   $user->level = Input::get('level');
   $user->save();
   return Redirect::to('users')->with('notice', 'El usuario ha sido modificado correctamente.');
}

Ambos reciben como parámetro el id para modificar el usuario.

El primero recuperará el id con el registro que se pasa como parámetro, y se lo pasará a la vista save.blade.php.

Y el segundo será el encargado de modificar el registro, enviado desde el formulario. También se redireccionará a la página principal con el mensaje “El usuario ha sido modificado correctamente.”

Bien, ahora que tenemos las acciones, vamos editar nuestra vista save.blade.php con el siguiente código:

<!DOCTYPE html>
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title> Guardar usuario </title>
 </head>
 <body>
    <h1> Guardar usuario </h1>
    {{ Form::open(array('url' => 'users/' . $user->id)) }}
       {{ Form::label ('real_name', 'Nombre real') }}
       <br />
       {{ Form::text ('real_name', $user->real_name) }}
       <br />
       {{ Form::label ('email', 'Email') }}
       <br />
       {{ Form::text ('email', $user->email) }} 
       <br /> 
       @if($user->id)
          {{ Form::hidden ('_method', 'PUT') }}
       @else
          {{ Form::label ('password', 'Contraseña') }}
          <br />
          {{ Form::password ('password') }}
          <br />
       @endif
       {{ Form::label ('level', 'Nivel') }}
       <br />
       {{ Form::selectRange('level', 1, 5, array('selected' => $user->level) ) }}
       <br />
       {{ Form::submit('Guardar usuario') }}
       {{ link_to('users', 'Cancelar') }}
    {{ Form::close() }}
 </body>
</html>

Para entender este código primero debemos entender qué es un helper. Los helper son funciones que permiten imprimir código html, ésta es otra de las ventajas de blade.

Para abrir y cerrar el formulario usamos los métodos open() y close() de la clase Form. El método open() recibirá como parámetro la url dónde irá la petición, a la cual le pasamos el id del registro, id que se pasará vacío si el registro es nuevo.

También llamamos al método label() que recibirá dos parámetros, el primero será el atributo for y el segundo el texto que mostrará este etiqueta. Y también llamamos a otros métodos helper text() y password(), los cuales también recibirán dos parámetros, el primero será el valor del name y id, y el segundo el valor que tenga por defecto, el value. Como en este ejemplo tenemos un objeto nuevo, entonces los valores se pasarán nulos y los campos estarán vacíos, pero en el caso de la modificación del formulario, los campos se verán con los valores del registro.

Otro método que usamos en esta vista es selectRange(), que nos devolverá un select que tendrá un rango de números, que en nuestro caso será del 1 al 5, esto para poner el nivel de los usuarios. El primer parámetros será el valor del name y el id del select. El segundo y el tercer el rango, de qué número a qué numero. Y el último será el valor del selected, osea el valor por defecto.

Con respecto a las líneas:

@if($user->id)
   {{ Form::hidden ('_method', 'PUT') }}
@else
   {{ Form::label ('password', 'Contraseña') }}
   <br />
   {{ Form::password ('password') }}
   <br />
@endif

Aquí preguntamos por el id del registro. Osea, si el id es algún valor, por ejemplo 1, entonces significa que el usuario está intentando modificar un registro existente, así que agregamos un campo oculto “_method” con el valor “PUT”, éste es el que permitirá a nuestra aplicación indicarle que el se está intentando modificar el registo. Si en cambio el id no existe, osea, que el registro es nuevo, entonces le agregamos un campo para la contraseña del usuario, porque la contraseña sólo la crearemos cuando damos de alta al usuario.

Si querés ver más helper podés consultar la documentación de Laravel:

http://laravel.com/docs/html

Ahora para acceder tanto al formulario para crear como para modificar, vamos a volver a nuestra vista index.blade.php y vamos a cambiar primero:

<p> Crear nuevo usuario </p>

Por:

<p> {{ link_to ('users/create', 'Crear nuevo usuario') }} </p>

También en el listado de la tabla buscamos:

<td style="text-align: center;"> Editar </td>

Y la modificamos por:

<td style="text-align: center;"> {{ link_to('users/'.$item->id.'/edit', 'Editar') }} </td>

Como se ve en ambos ejemplos, usamos un nuevo helper llamado link_to(), que dibujará un enlace. Sus parámetros son la ruta y el texto que debe mostrarse en el enlace.

Mostrar registros individualmente

Ahora crearemos la acción para mostrar el registro, así que modificamos el método show() con el siguiente código:

public function show($id) {
   $user = User::find($id);
   return View::make('users.show')->with('user', $user);
}

Muy fácil. Un método que recibe el id del registro y lo recupera pasándolo a la vista show.blade.php.

Ahora vamos a editar la vista show.blade.php con el siguiente código:

<!DOCTYPE html>
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title> Datos de usuario </title>
 </head>
 <body>
    <h1> {{ $user->real_name }} </h1>
    <ul>
       <li> Nombre de usuario: {{ $user->real_name }} </li>
       <li> Email: {{ $user->email }} </li>
       <li> Nivel: {{ $user->level }} </li>
       <li> Activo: {{ ($user->active) ? 'Sí' : 'No' }} </li>
    </ul>
    <p> {{ link_to('users', 'Volver atrás') }} </p>
 </body>
</html>

Y en index.blade.php agregamos el enlace para ver los registros en forma individual modificando:

<td style="text-align: center;"> Ver </td>

Por:

<td style="text-align: center;"> {{ link_to('users/'.$item->id, 'Ver') }} </td>

Eliminar registros

Para finalizar con nuestro módulo vamos a crear la acción de eliminar un registro agregando a nuestro controlador el contenido de la acción destroy():

public function destroy($id) {
   $user = User::find($id);
   $user->delete();
   return Redirect::to('users')->with('notice', 'El usuario ha sido eliminado correctamente.');
}

El código es muy simple, se recupera el registro por el id y se llama al método delete() del objeto, para eliminar el registro. Finalmente redireccionamos a la página principal con el mensaje: “El usuario ha sido eliminado correctamente”.

Y para acceder a la misma debemos ir a index.blade.php y modificar:

<td style="text-align: center;"> Eliminar </td>

Por:

<td style="text-align: center;"> 
   {{ Form::open(array('url' => 'users/'.$item->id)) }}
      {{ Form::hidden("_method", "DELETE") }}
      {{ Form::submit("Eliminar") }}
   {{ Form::close() }}
</td>

Como se ve en este último código, debemos enviar un campo oculto con el nombre “_method”, al igual que como lo hacemos cuando enviamos un formulario para modificar el registro, pero esta vez con el valor “DELETE”, para que Laravel comprenda que estamos enviándolo a la acción destroy(). Además el formulario que contiene este campo, y el botón que al pulsarlo enviará la petición, recibirá una url con el id del registro.

Descargar ejemplo

Anterior: Laravel, parte 7: Vistas

Siguiente: Laravel, parte 9: Validaciones

Redes sociables

    58 thoughts on “Laravel, parte 8: CRUD

    1. Buen día, primero que nada muchas gracias por hacer estos tutoriales, realmente me han servido bastante.
      He estado siguiendo cada post de laravel y me ha ido bastante bien, hasta que llegue a la parte de edit/update. Cuando intento editar me sale un error NotFoundHttpException. No se a que podría deberse, pero me fije que cuando se guarda un nuevo registro y cuando hace un update, utiliza el mismo save.blade.php, y con un nuevo registro lo hace perfecto.

      • Luis, cómo estás. Mirá, el error que te sale, yo no sé de qué se trata, porque nunca me ha sucedido. Pero buscando un poco en google encontré que a una persona le pasa algo similar a vos:

        http://stackoverflow.com/questions/19212938/laravel-4-routecontroller-method-returns-notfoundhttpexception

        La publicación está en inglés pero lo que le responden es que para hacer REST hay que utilizar el método resource().

        ¿Vos incluiste dentro de tu archivo routes.php la línea?:

        Route::resource(‘users’, ‘UsersController’);

        ¿O estás realizando las acciones con el método get()

        Si querés lo que podés hacer es descargar el proyecto, que yo lo subí a github, y comparás si el código coincide:

        https://github.com/fernandoggaitan/laravel_crud

        Todo el código está dentro de app, en las carpetas models, views y controllers, y en el archivo routes.php

        Si seguís teniendo el problema, mandame otro mensaje y vemos qué puede ser.

        Saludos!

    2. Muchas gracias por la respuesta, estuve buscando y quien sabe que sea, lo mas probable es que no tenga bien definida una url, ya que al darle al botón para editar me sale ese mensaje de error. Ya mas adelante, que tenga mas experiencia en este framework, lo checare. Mientras tanto a seguiré viendo otros aspectos del framework en tu blog.
      Y una vez mas muchas gracias por subir estos tutoriales, son realmente útiles.

      • Mirá, probando un poco pude replicar el error que te sale.

        Cuando vos definís una url con un valor dinámico, osea un id, en este caso tenés que hacerlo de esta forma:

        Route::get(‘ruta/{id}’, function($id){
        return $id;
        });

        Fijate que el valor dinámico, {id}, está entre corchetes.

        Si la definís de esa forma:

        Route::get(‘ruta/id’, function($id){
        return $id;
        });

        Acá te tira error.

        Fijate que el id tenga lleves. Pegale una ojeada a tu código, para ver si es eso.

        Saludos!

        • Muchas gracias por las molestias, después de un par de horas y unos buenos tragos amargos encontré la tonta pero increíble solución. Un error de vista y no seguir al pié de la letra las instrucciones, dado que yo use una base de datos propia, ocasionó borrar una línea tan importante que le dice a mi formulario que con ella se modifica un registro.
          @if($nombre->id)
          {{ Form::hidden (‘_method’, ‘PUT’) }}
          @endif
          En fin, aprendí un par de cosas más por esta desgracia, y una vez más muchas gracias. Saludos D:

          • Buenísimo! Me alegro que hayas podido resolver el problema.

            Que tengas buen día, Luis.

            Saludos!

    3. Una pregunta maestro, veras usando el metodo find por ejemplo $user = User::find($id); si en mi base de datos tengo el campo id como us_id me sale un error mientras si el campo lo mantengo como id va todo normal, como puedo solucionar este problema?? para poder usar el campo us_id y no id??, gracias de antemano.

      • Rodrigo, cómo estás.

        Laravel asume que la clave primaria es “id”, pero en tu caso lo vas a tener que definir manualmente. Así que abrí tu archivo modelo (supongo que es User) y agrega la siguiente propiedad:

        protected $primaryKey = ‘us_id’;

        Osea que debería quedar así el modelo:

        class User extends Eloquent {
        protected $primaryKey = ‘us_id’;
        }

        Fuente: http://stackoverflow.com/questions/20030716/change-default-primary-key-in-eloquent

        Fijate si funciona, y sino avisame, y lo seguimos viendo.

        Saludos!

        • muchas gracias maestro, eso soluciono el problemilla que tenia, a continuar aprendiendo, gracias por los tutoriales, y gracias nuevamente. :)

    4. Saludos! muchas gracias por estos tutoriales!!
      son muy útiles, están muy bien explicados y estructurados los seguiré todos

    5. Buenas Ferchu, primero que todo te agradezco por el tiempo que te tomaste en hacer estos tutoriales estan buenisimos, mi consulta es la siguiente, como hago si deseo agregar un ajax a la parte de borrar? y si en vez de usar el metodo DELETE con un Formulario, uso un anchor para que vaya al metodo del controller y me redireccione a la Vista de Usuarios se podra? podrias explicar una posible forma? gracias de antemano

      • Hola, cómo estás.

        Lo del ajax es muy fácil, tenés que enviar una petición ajax a /users/id. Pero acordate que tenés que enviar una variable con el nombre: ‘_method’ e igualarla a ‘DELETE’.

        Sino fijate acá que hicimos un ejemplo de Laravel con Ajax.

        http://fernando-gaitan.com.ar/laravel-parte-13-ajax/

        Lo otro del anchor, no lo entendí muy bien. Podrías explicármelo más detalladamente?

        Saludos!

    6. Woow super increíble, ya se me esta haciendo mas fácil de entender la lógica de Laravel y el uso con la base de datos.

    7. gracias de nuevo por la info y para recordar que el ORUD, se puede hacer automáticamente desde la terminal con el comando
      php artisan controller:make UsersController

    8. Gracias por la info, me gustaría saber si se puede colocar un placeholder en el save.blabe.php, o tendría que separar y hacer un formulario para crear y otro para modificar, tambien como se enviaria un correo de confirmación a el usuario registrado, perdon mi ignorancia soy un poco novato en este tema.

      • Alejo, cómo estás.

        El helper: Form::text() recibe tres parámetros, el primero es el name/id, el segundo es el valor por defecto (el value) y podés ponerle un tercer parámetro que es un array con datos adicionales. Por ejemplo:

        {{ Form::text(‘usuario’, ‘Pepito’, array(‘placeholder’=>’Ingrese un nombre’)); }}

        Yo hice un sólo formulario, que es save.blade.php, porque tanto el de insertar como modificar, son prácticamente iguales. Si vos querés hacerlo con dos vistas distintas es lo mismo.

        Con respecto a lo de los mails, yo no subí ninguna publicación para eso. Te la debo.

        Pero podés verlo en la documentación oficial de Laravel:

        http://laravel.com/docs/mail

        Saludos!

        • Muchas gracias por aclararme la duda, este es el mejor tutorial de laravel ya me pongo a practicar lo de los mail con la documentación.

    9. Fernando:

      Como se puede verificar en donde puede estar un error … porque me dice: “Whoops, looks like something went wrong.” y como hago para saber donde fue ???

      Gracias

    10. Hola Ferchu, gran tutorial. Estoy aprendiendo mucho.
      Tengo un problema con este capítulo. He hecho todo lo que me dices e incluso bajandome los archivos de ejemplo de view, controller y model y el fichero route.php y no me funciona. Me está dando este error: Call to undefined function Illuminate\View\Compilers\token_get_all()

      Symfony\Component\Debug\Exception\FatalErrorException
      …/­vendor/­laravel/­framework/­src/­Illuminate/­View/­Compilers/­BladeCompiler.php118

      He buscado por internet y no he encontrado nada. Podrías ayudarme para averiguar que está pasando?.
      Gracias por todo.

    11. Buenas tardes, primero que nada felicitarte por el blog…

      Por otro lado, estoy siguiendo tu tutorial del CRUD al pie de la letra, descargue el Master-Crud y todo, pero no me deja insertar ni editar un archivo, para probar los demas, cree directamente un registro en PHPMYADMIN y si me permite visualizar y eliminar, sabrias cual es el problema?

        • Cuando relleno el formulario para crear un nuevo registro me dice : Whoops, looks like something went wrong.

          Aqui te dejare mi formulario y mi controllador a ver si puedes ayudarme, muchas gracias :

          -FORMULARIO:

          {{ Form::open(array(‘url’ => ‘users/’ . $user->id)) }}
          {{ Form::label (‘nombre’, ‘Nombre:’) }}

          {{ Form::text (‘nombre’, $user->nombre) }}

          {{ Form::label (‘apellido’, ‘Apellido:’) }}

          {{ Form::text (‘apellido’, $user->apellido) }}

          {{ Form::label (‘nickname’, ‘Nickname:’) }}

          {{ Form::text (‘nickname’, $user->nickname) }}

          {{ Form::label (‘contrasenia’, ‘Contraseña:’) }}

          {{ Form::password (‘contrasenia’, $user->contrasenia) }}

          @if($user->id)
          {{ Form::hidden (‘_method’, ‘PUT’)}}
          @endif
          {{ Form::submit(‘Guardar usuario’) }}
          {{ link_to(‘users’, ‘Cancelar’) }}
          {{ Form::close() }}

          -CONTROLADOR:

          public function store(){
          //INSERTAR EN BD EL USUARIO @GET
          $user = new User();
          $user->nombre = Input::get(‘nombre’);
          $user->apellido = Input::get(‘apellido’);
          $user->nickname = Input::get(‘nickname’);
          $user->contrasenia = Input::get(‘contrasenia’);
          $user->save();

          return Redirect::to(‘users’)->with(‘notice’, ‘El usuario se ha ingresado correctamente’);
          }

          public function update($id){
          //EDITADO DEL REGISTRO EN EL FORMULARIO @PUT
          $user = User::find($id);
          $user->nombre = Input::get(‘nombre’);
          $user->apellido = Input::get(‘apellido’);
          $user->nickname = Input::get(‘nickname’);
          $user->contrasenia = Input::get(‘contrasenia’);
          $user->save();
          return Redirect::to(‘users’)->with(‘notice’, ‘El usuario se ha modificado correctamente’);
          }

          • Agregaste dentro de routes.php la línea:

            Route::resource(‘users’, ‘UsersController’);

            • Si, si lo hice, por eso mismo no entiendo cual es mi problema, ya que como te digo, me permite eliminar y visualizar un registro de la Base de datos

            • Sinceramente no veo ningún error. Pueden ser muchas cosas, que estés intentando insertar campos nulos, que no hayas creado tu base de datos con migraciones, y algo se esté rompiendo en el camino, etc.

              Si querés agregame al chat de gmail y lo vamos viendo, porque la verdad no tengo idea qué puede ser.

              Saludos!

    12. Hola Fernando! Muy buena la explicación que das a todos :)… Tengo algunos problemas :(… He seguido todos los pasos y al momento de CREAR UN USUARIO y dar en guardar me manda este error:
      SQLSTATE[22P02]: Invalid text representation: 7 ERROR: la sintaxis de entrada no es válida para integer: «» (SQL: select count(*) as aggregate from “users” where “email” = hola@hotmail.com and “id” )

      Algo similar me sucede al CERRAR SESIÓN :/!

      SQLSTATE[22P02]: Invalid text representation: 7 ERROR: el valor de array debe comenzar con «{» o información de dimensión (SQL: update “users” set “updated_at” = 2014-08-03 01:44:21, “remember_token” = v7ODBMUGwAHUddRDi5b7wOVNHgUNwkwR8YGuqlxtYsgiTXbAkyu4L8MeBNn0 where “id” = 1)

      No sé qué podría ser :(…

      • Fiorella por lo que alcanzo a ver, parece ser que se están intentando insertar en un campo numérico un valor que no lo es. Será eso?

        • Sigo con ese error :(… Todo me funciona, excepto cuando doy en guardar, en consecuencia no puedo crear más usuarios y aparte que de los que he creado manualmente en la base de datos, no valida la contraseña porque no esta hasheada o no sé como se dice :/… Estoy trabajando con PostgreSQL 9.2… Gracias por tu respuesta… :)

          • Fiorella, yo lo único que puedo ofrecerte, si tenés cuenta en gmail, agregame al chat, y me vas diciendo los errores que te tira, y te doy una mano.

            Saludos!

    13. como puedo hacer que en mi controlador de usuario en el metodo index al momento de hacer referencia a mi modelo haga el llamado a los registros desde el 5º en adelante por ejemplo.

    14. Antes que nada felicitaciones Fernando por el tutorial…

      Una duda, cuando se ejecuta por línea de comandos la instrucción:

      php artisan routes

      Las rutas generadas que se muestran en pantalla, ¿Donde quedan? Porque al abrir de nuevo el archivo routes.php este no se ve alterado, es decir no se matriculan las nuevas rutas.

      Como verifica entonces uno si fueron generadas correctamente?

      Muchas Gracias

      • Cuando vos agregás al archivo routes.php la línea:

        Route::resource(‘users’, ‘UsersController’);

        Entonces simplemente le están indicando que para ese controlador vas a crear esas acciones: index, create, store, etc.

        Con php artisan routes, lo único que estás haciendo es ver por consola las acciones actuales.

        Saludos!

    15. Hola, tengo una gran duda ojala pudiesen ayudarme y esta es la siguiente:

      Expondre un ejemplo con la siguiente oracion Una universidad tiene muchos usuarios
      entonces cuando hago mi registro primero creo mi universidad y todo bien pero al momento de registrar al usuario como yo puedo saber cual es el id que tiene la universidad que cree para que esta pueda utilizarla como llave foranea en mi usuario?

      espero puedan ayudarme…
      Gracias

      • Si lo estás haciendo con Laravel y Eloquent, es muy fácil:

        Suponte, que vos tengas una clase Universidad, y una tabla universidads, que tiene una columna llamada id, que es la primary key.

        Entonces hacés:

        $universidad = new Universidad();
        — Resto del código

        Y después de hacer llamar al método save()
        $universidad->save():

        Podés recuperar el id como:
        $id = $universidad->id;

        Saludos!

    16. Hola Fernando.
      Estoy en la creaciòn de un Formulario con Laravel5.
      Pero no me funciona {!! Form:: , tampoco
      [[ Form::open([‘route’ => ‘users.store’]) ]]
      [[ Form::submit(‘Grabar’) ]]
      [[ Form::close() ]],

      Por favor ayudame donde consultar y el comando correcto.

      Gracias.

    17. Como puedo leer un controller que está dentro de una carpeta es decir modular mi proyecto /controllers/admin/nombre_controller
      ya que en el route no lo puedo invocar Route(‘/url’, array(‘uses’=>’controllerAdmin@index’)); dentro del Route que instrucción debeía agregar para que entre a lacarpeta y lea el controller en codeigniter solo debia decirle donde se encontraba el controller y listo pero laravel es mas complicado podrían ayudarme?

    18. Hola Fernando, excelente tutorial, lo implementé y me funcionó perfecto. Tengo una consulta, estoy tratando de crear un web service SOAP con Laravel, pero no sé dónde ubicar los archivos (WSDL, XSD) ni cómo invocarlos, vos tenés idea? Sé que los REST son mucho más fáciles para PHP, pero me gustaría completar un pequeño ejercicio y no encuentro datos sobre cómo integrarlos con Laravel.
      Disculpá el off-topic, saludos!

    19. Hola Fernando Muchas gracias por dedicar tanto tiempo a crear estos tutoriales sobre laravel, de verdad se agradecen bastante.
      Mira te cuento leí tus publicaciones sobre laravel, luego leí la documentación de laravel y he podido hacer sin mayores problemas. El único problema que he tenido y no se solucionar es que al hacer un crud en la parte de edición del contenido cuando este tiene una imagen siempre me aparece el campo file como vacío, entonces cuando quiero hacer el update el campo file se va en vacío y eso me da un error.
      Tu serias tan amable de ayudarme a solucionarlo.
      No se si poner aquí mi código,la verdad es que no quiero que se haga muy pesado para el resto de los usuarios.
      Avísame por favor.
      Saludos y muchas gracias

      • Yo lo que haría es guardar la url de la imagen en tu proyecto en un campo hidden, y cuando el usuario modifique la misma que con Javascript vacíe ese hidden, entonces al procesarse la petición, si ese campo hidden viene vacío entonces significa que hay que subir una nueva al servidor, de lo contrario que conserve el path de ese campo oculto.

        Pero en fin, son cosas que vas a tener que resolver más con Javascript que con Laravel.

        Saludos!

    20. Hermano seguí tu tutorial al pie de la letra y no me funciona; es más descargué el ejemplo y tampoco; pero noté que la estructura de carpetas del ejemplo es distinto al que yo tengo. Estoy usando Laravel 5! Tendrá algo que ver el problema con la versión de Laravel?

        • Gracias por responder!
          Será que puede hacer un tutorial de un CRUDcon laravel 5? Te lo agradecería mucho Ferchu

          • De momento te lo voy a deber, porque estoy con muchas cosas.

            Te aconsejo que busques alguno en Youtube, seguro hay alguno por ahí.

            Saludos!

    21. Gracias por responder!
      Será que puede hacer un tutorial de un CRUD con laravel 5? Te lo agradecería mucho Ferchu

    Comments are closed.